مقدمة في العمل مع JSON في C#
JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات أصبح معيارًا للتفاعل بين خدمات الويب وملفات التكوين وواجهات برمجة التطبيقات (API). في بيئة C# (.NET)، يُعد العمل مع JSON من المهام الأساسية التي يواجهها كل مطور. في هذه المقالة، سنشرح بالتفصيل كيفية إجراء التحليل (إلغاء التسلسل) وتسلسل البيانات في C#، باستخدام كل من المكتبة المدمجة System.Text.Json والمكتبة الخارجية الشهيرة Newtonsoft.Json.
ستتعلم كيفية تحويل كائنات C# إلى سلاسل JSON والعكس، وكيفية التعامل مع الهياكل المتداخلة، بالإضافة إلى المشكلات المحتملة التي قد تواجهها عمليًا. ستكون المادة مفيدة لكل من المبتدئين والمطورين ذوي الخبرة الذين يرغبون في تنظيم معرفتهم.
تسلسل كائنات C# إلى JSON
التسلسل هو عملية تحويل كائن C# (أو هيكل بيانات آخر) إلى سلسلة بتنسيق JSON. في .NET، توجد عدة طرق للقيام بذلك. سننظر في طريقتين رئيسيتين: System.Text.Json (الموصى بها من Microsoft) و Newtonsoft.Json (قديمة ولكنها لا تزال مستخدمة على نطاق واسع).
التسلسل باستخدام System.Text.Json
بدءًا من .NET Core 3.0، قدمت Microsoft مكتبتها الخاصة للعمل مع JSON — System.Text.Json. تتميز بأداء عالٍ واستهلاك منخفض للذاكرة. للتسلسل، يتم استخدام طريقة JsonSerializer.Serialize().
using System;using System.Text.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
class Program{ static void Main() { var person = new Person { Name = "Иван Петров", Age = 30, Email = "ivan@example.com" };
string json = JsonSerializer.Serialize(person); Console.WriteLine(json); }}نتيجة التنفيذ:
{"Name":"Иван Петров","Age":30,"Email":"ivan@example.com"}التسلسل باستخدام Newtonsoft.Json
كانت مكتبة Newtonsoft.Json (المعروفة أيضًا باسم Json.NET) المعيار الفعلي لفترة طويلة. توفر مرونة وإعدادات أكثر من الحل المدمج. لاستخدامها، يجب تثبيت حزمة NuGet Newtonsoft.Json.
using System;using Newtonsoft.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
class Program{ static void Main() { var person = new Person { Name = "Мария Сидорова", Age = 25, Email = "maria@example.com" };
string json = JsonConvert.SerializeObject(person); Console.WriteLine(json); }}ستكون النتيجة مماثلة، لكن Newtonsoft.Json تستخدم افتراضيًا تسمية الجمل (camelCase) لأسماء الخصائص إذا تم تكوينها.
تخصيص التسلسل
في كلتا المكتبتين، يمكن التحكم في تنسيق الإخراج: تجاهل القيم null، استخدام CamelCase، تنسيق JSON مع مسافات بادئة، إلخ.
مثال لـ System.Text.Json مع الإعدادات:
var options = new JsonSerializerOptions{ WriteIndented = true, // إخراج جميل مع مسافات بادئة PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // تسمية الجمل DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // تجاهل null};
string json = JsonSerializer.Serialize(person, options);تحليل (إلغاء تسلسل) JSON في C#
إلغاء التسلسل هو العملية العكسية: تحويل سلسلة JSON إلى كائن C#. هذا ضروري عند استلام البيانات من API، أو قراءة ملفات التكوين