كائن C# إلى JSON في .NET: أسرار السرعة والأداء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يجب على كل مطور C# أن يعرف كيفية تسلسل الكائنات إلى JSON

\n\n

هل تساءلت يومًا عن عدد المرات التي يحول فيها كودك كائنات C# المعقدة إلى سلاسل JSON مضغوطة؟ العمل مع واجهات برمجة التطبيقات (API)، حفظ التهيئات، نقل البيانات بين الخدمات المصغرة — في كل مكان نواجه التسلسل. سؤال "How do I turn a C# object into a JSON string in .NET?" هو أحد أكثر الأسئلة شيوعًا على Stack Overflow، وهذا ليس من قبيل الصدفة. يعتمد كيفية قيامك بذلك على سرعة تطبيقك واستجابته.

\n\n

في هذه المقالة، لن نعرض فقط كيفية تحويل كائن إلى سلسلة JSON. سنقوم بتحليل التحسين والأداء لهذه العملية: من اختيار المكتبة إلى الضبط الدقيق للمسلسل. ستتعلم كيفية تجنب الأخطاء النموذجية التي تبطئ تطبيقك، وستتعلم كتابة كود يعمل بسرعة البرق.

\n\n

الطريقة الأساسية: كيفية تحويل كائن C# إلى سلسلة JSON

\n\n

لنبدأ بالكلاسيكيات. لنفترض أن لدينا فئة بسيطة User:

\n\n
public class User\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public string Email { get; set; }\n}
\n\n

أسهل طريقة لتسلسلها هي استخدام Newtonsoft.Json (المعروف أيضًا باسم Json.NET):

\n\n
using Newtonsoft.Json;\n\nvar user = new User { Id = 1, Name = "أليكسي", Email = "alex@example.com" };\nstring json = JsonConvert.SerializeObject(user);\nConsole.WriteLine(json); \n// {"Id":1,"Name":"أليكسي","Email":"alex@example.com"}
\n\n

مع إصدار .NET Core 3.0، ظهر System.Text.Json الأصلي — بديل سريع وخفيف الوزن:

\n\n
using System.Text.Json;\n\nvar user = new User { Id = 1, Name = "أليكسي", Email = "alex@example.com" };\nstring json = JsonSerializer.Serialize(user);\nConsole.WriteLine(json);\n// {"Id":1,"Name":"أليكسي","Email":"alex@example.com"}
\n\n

يبدو أنه لا يوجد فرق. ولكن عندما يعالج تطبيقك آلاف الطلبات في الثانية، يصبح اختيار المسلسل أمرًا بالغ الأهمية.

\n\n

الأداء: Newtonsoft.Json مقابل System.Text.Json

\n\n

دعونا نلقي نظرة على أداء التسلسل في .NET 8. في اختبارات مع مليون عملية:

\n\n
    \n
  • System.Text.Json — أسرع بنسبة 40-60% في المتوسط من Newtonsoft.Json عند تسلسل الكائنات البسيطة.
  • \n
  • Newtonsoft.Json — يخسر في السرعة، لكنه يفوز في المرونة: يدعم المزيد من المحولات المخصصة والسمات.
  • \n
  • استهلاك الذاكرة — يولد System.Text.Json قمامة أقل، مما يقلل الحمل على جامع القمامة (GC).
  • \n
\n\n

ومع ذلك، هناك فارق بسيط: إذا كنت بحاجة إلى دعم JsonIgnore أو JsonPropertyName أو المحولات المعقدة، فإن Newtonsoft.Json لا يزال لا غنى عنه. ولكن بالنسبة لمعظم المشاريع الحديثة على .NET 6+ يوصى باستخدام System.Text.Json.

\n\n

تحسين التسلسل: 5 نصائح عملية

\n\n

الآن ننتقل إلى الجزء الأكثر إثارة للاهتمام — كيفية جعل كودك أسرع.

\n\n

1. استخدم مولدات المصدر (source generators)

\n\n

يدعم System.Text.Json توليد المصدر — وهو تجميع كود التسلسل في مرحلة البناء، وليس أثناء التنفيذ. النتيجة: تسريع بمقدار 2-3 مرات!

\n\n
[JsonSerializable(typeof(User))]\npublic partial class UserContext : JsonSerializerContext\n{\n}\n\n// الاستخدام:\nstring json = JsonSerializer.Serialize(user, UserContext.Default.User);
\n\n

هذا النهج فعال بشكل خاص للنماذج الكبيرة والتطبيقات ذات الأحمال العالية.

\n\n

2. قم بضبط المسلسل وفقًا لمهامك

\n\n

لا تستخدم الإعدادات الافتراضية. قم بتعطيل الخيارات غير الضرورية:

\n\n
var options = new JsonSerializerOptions\n{\n    PropertyNamingPolicy = JsonNami                

المدونات

توصيات الكتب