مقدمة
\nJSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات أصبح المعيار الفعلي للتواصل بين الخادم والعميل، وكذلك لتخزين التكوينات. في نظام C# (.NET) البيئي، تم تنفيذ العمل مع JSON على أعلى مستوى: حيث تتوفر للمطور مكتبات مدمجة وحلول خارجية قوية. في هذه المقالة، سنشرح من خلال أمثلة عملية كيفية إجراء التحليل والتسلسل وإلغاء التسلسل لـ JSON في C# باستخدام الأساليب الحديثة.
\nسننظر في أداتين رئيسيتين: System.Text.Json (مكتبة مدمجة مع .NET Core 3.0+) و Newtonsoft.Json (مكتبة خارجية شائعة). ستتعلم كيفية تحويل كائنات C# إلى JSON والعكس، وكيفية العمل مع الهياكل المتداخلة، وكيفية معالجة الأخطاء.
\n\nأساسيات التسلسل وإلغاء التسلسل في C#
\nقبل التعمق في الكود، دعنا نحدد المصطلحات. التسلسل هو عملية تحويل كائن C# (مثل مثيل لفئة) إلى سلسلة JSON. إلغاء التسلسل هو العملية العكسية: من سلسلة JSON نستعيد كائن C#. في C#، يتم استخدام السمات وفئات التسلسل الخاصة لذلك.
\n\n1. العمل مع System.Text.Json (المكتبة المدمجة)
\nبدءًا من .NET Core 3.0، قدمت Microsoft مكتبتها الخاصة للعمل مع JSON — System.Text.Json. وهي أسرع من Newtonsoft.Json ولا تتطلب تثبيت حزم إضافية.
لننظر إلى فئة بسيطة Person:
public class Person\n{\n public string Name { get; set; }\n public int Age { get; set; }\n public string Email { get; set; }\n}\nالتسلسل إلى JSON:
\nusing System.Text.Json;\n\nvar person = new Person\n{\n Name = "أليكسي",\n Age = 30,\n Email = "alex@example.com"\n};\n\nstring json = JsonSerializer.Serialize(person);\nConsole.WriteLine(json);\n// الإخراج: {"Name":"أليكسي","Age":30,"Email":"alex@example.com"}\nإلغاء التسلسل من JSON:
\nstring jsonString = @"{""Name"":""ماريا"",""Age"":25,""Email"":""maria@example.com""}";\nPerson? person = JsonSerializer.Deserialize<Person>(jsonString);\nConsole.WriteLine(person?.Name); // ماريا\nلاحظ العامل ? (nullable) — قد يعيد إلغاء التسلسل null عند حدوث خطأ.
2. العمل مع Newtonsoft.Json (Json.NET)
\nعلى الرغم من ظهور System.Text.Json، يظل Newtonsoft.Json خيارًا شائعًا بفضل مرونته وإمكانياته الواسعة في التخصيص. لاستخدامه، قم بتثبيت حزمة NuGet Newtonsoft.Json.
مثال مع نفس الفئة Person:
using Newtonsoft.Json;\n\n// التسلسل\nvar person = new Person { Name = "إيفان", Age = 35, Email = "ivan@example.com" };\nstring json = JsonConvert.SerializeObject(person);\nConsole.WriteLine(json);\n\n// إلغاء التسلسل\nstring jsonInput = @"{'Name':'أولغا','Age':28,'Email':'olga@example.com'}";\nPerson? personDeserialized = JsonConvert.DeserializeObject<Person>(jsonInput);\nConsole.WriteLine(personDeserialized?.Name); // أولغا\nيدعم Newtonsoft.Json افتراضيًا كل من علامات الاقتباس المزدوجة والمفردة، مما يجعله أكثر تسامحًا مع JSON "غير النظيف".
\n\nسيناريوهات متقدمة: العمل مع الكائنات المتداخلة والمجموعات
\nفي المشاريع الحقيقية، نادرًا ما يكون JSON مسطحًا. لننظر في مثال مع بيانات متداخلة.
\nلنفترض أن لدينا فئة Company تحتوي على قائمة من الموظفين:
public class Employee\n{\n public string Name { get; set; }\n public string Position { get; set; }\n}\n\npublic class Company\n{\n public string CompanyName { get; set; }\n public List<Employee> Employees { get; set; }\n}\nالتسلسل (System.Text.Json):
\n
المدونات
توصيات الكتب
اقرأ أيضًا