معالجة JSON في C# (.NET): دليل شامل
JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات، يُستخدم على نطاق واسع في تطبيقات الويب وواجهات برمجة التطبيقات (API) وملفات التكوين. في نظام C# (.NET) البيئي، هناك طريقتان رئيسيتان للعمل مع JSON: المكتبة الكلاسيكية Newtonsoft.Json (المعروفة أيضًا باسم Json.NET) والمكتبة المدمجة الحديثة System.Text.Json، التي ظهرت في .NET Core 3.0 وما فوق. في هذه المقالة، سنشرح بالتفصيل كلتا الأداتين، وإمكانياتهما، وتركيبهما، وأفضل الممارسات.
1. Newtonsoft.Json (Json.NET)
كانت مكتبة Newtonsoft.Json لفترة طويلة المعيار الفعلي للعمل مع JSON في C#. توفر واجهة برمجة تطبيقات غنية، ودعم LINQ to JSON، وإعدادات مرنة للتسلسل وإلغاء التسلسل. يمكن تثبيتها عبر NuGet:
Install-Package Newtonsoft.Json1.1. التسلسل وإلغاء التسلسل
العمليات الأساسية هي تحويل كائن إلى JSON والعكس. لننظر إلى الفئة Person:
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}التسلسل (كائن ← JSON):
var person = new Person { Name = "إيفان", Age = 30, Email = "ivan@example.com" };string json = JsonConvert.SerializeObject(person, Formatting.Indented);Console.WriteLine(json);إلغاء التسلسل (JSON ← كائن):
string json = @"{""Name"":""ماريا"",""Age"":25,""Email"":""maria@example.com""}";Person person = JsonConvert.DeserializeObject<Person>(json);Console.WriteLine(person.Name); // ماريا1.2. العمل مع JObject وJArray
تدعم مكتبة Newtonsoft.Json LINQ to JSON، مما يسمح بالوصول الديناميكي إلى عناصر JSON دون إنشاء فئات محددة النوع بشكل صارم.
string json = @"{""products"":[{""id"":1,""name"":""لابتوب""},{""id"":2,""name"":""فأرة""}]}";JObject obj = JObject.Parse(json);JArray products = (JArray)obj["products"];
foreach (var product in products){ int id = (int)product["id"]; string name = (string)product["name"]; Console.WriteLine($"ID: {id}, Name: {name}");}1.3. سمات ضبط التسلسل
باستخدام السمات، يمكنك التحكم في أسماء الخصائص في JSON، وتجاهل الحقول، وتعيين القيم الافتراضية، وغير ذلك الكثير.
public class User{ [JsonProperty("user_name")] public string Name { get; set; }
[JsonIgnore] public string Password { get; set; }
[JsonProperty("registration_date")] public DateTime CreatedAt { get; set; }}
// أثناء التسلسل، سيتم تخطي Password، وسيصبح Name هو "user_name"string json = JsonConvert.SerializeObject(user);2. System.Text.Json (المكتبة المدمجة في .NET)
بدءًا من .NET Core 3.0، قدمت Microsoft مكتبتها الخاصة System.Text.Json، المحسّنة للأداء والاستهلاك الأدنى للذاكرة. لا تتطلب تثبيت حزم إضافية (باستثناء بعض الإضافات).
2.1. التسلسل وإلغاء التسلسل
العمل مع System.Text.Json مشابه لـ Newtonsoft.Json، لكنه يحتوي على بعض الاختلافات في التركيب والسلوك الافتراضي (على سبيل المثال، حساسية حالة الأحرف).
using System.Text.Json;
var person = new Person { Name = "أليكسي", Age = 28, Email = "alex@example.com" };string json = JsonSerializer.Serialize(person, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);
// إلغاء التسلسلstring jsonInput = @"{""Name"":""أولغا"",""Age"":32,""Email"":""olga@example.com""}";Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonInput);مهم! بشكل افتراضي، System.Text.Json ي