معالجة JSON في C# (.NET): دليل كامل
JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات أصبح معيارًا لواجهات برمجة تطبيقات الويب وملفات التكوين. في نظام 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 Package Manager، نفذ الأمر:
Install-Package Newtonsoft.Jsonأو عبر .NET CLI:
dotnet add package Newtonsoft.Jsonالعمليات الأساسية: التسلسل وإلغاء التسلسل
التسلسل هو تحويل كائن C# إلى سلسلة JSON. إلغاء التسلسل هو العملية العكسية.
using Newtonsoft.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public List<string> Hobbies { get; set; }}
// التسلسلPerson person = new Person{ Name = "أليكسي", Age = 30, Hobbies = new List<string> { "برمجة", "قراءة", "سفر" }};
string json = JsonConvert.SerializeObject(person, Formatting.Indented);Console.WriteLine(json);
// إلغاء التسلسلstring jsonInput = @"{'Name':'ماريا','Age':25,'Hobbies':['رسم','يوجا']}";Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonInput);Console.WriteLine($"الاسم: {deserializedPerson.Name}, العمر: {deserializedPerson.Age}");العمل مع البيانات الديناميكية
يدعم Newtonsoft.Json الأنواع الديناميكية، وهو مناسب عند العمل مع بنية JSON غير معروفة.
dynamic dynamicObject = JsonConvert.DeserializeObject("{'Name':'إيفان','Score':95.5}");Console.WriteLine($"الطالب: {dynamicObject.Name}, الدرجة: {dynamicObject.Score}");LINQ to JSON
توفر المكتبة واجهة برمجة تطبيقات قوية للاستعلام عن بيانات JSON باستخدام LINQ.
using Newtonsoft.Json.Linq;
string json = @"{ 'users': [ {'name': 'آنا', 'age': 28}, {'name': 'بيتر', 'age': 35}, {'name': 'إيلينا', 'age': 22} ]}";
JObject obj = JObject.Parse(json);var youngUsers = obj["users"] .Where(u => (int)u["age"] < 30) .Select(u => (string)u["name"]);
foreach (var name in youngUsers){ Console.WriteLine(name); // سيطبع: آنا, إيلينا}2. System.Text.Json
System.Text.Json هي مكتبة حديثة من Microsoft، محسّنة للأداء والاستهلاك الأدنى للذاكرة. وهي مدمجة في .NET ولا تتطلب تثبيت حزم إضافية.
العمليات الأساسية
using System.Text.Json;using System.Text.Json.Serialization;
public class Product{ [JsonPropertyName("product_name")] public string Name { get; set; } public decimal Price { get; set; } [JsonIgnore] public string InternalCode { get; set; }}
// التسلسلProduct product = new Product{ Name = "لابتوب", Price = 75000.50m, InternalCode = "INT-001"};
string json = JsonSerializer.Serialize(product, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);
// إلغاء التسلسلstring jsonInput = @"{""product_name"":""هاتف ذكي"",""Price"":45000.00}";Product deserializedProduct = JsonSerializer.Deserialize<Product>(jsonInput);Console.WriteLine($"المنتج: {deserializedProduct.Name}, السعر: {deseriali