مقدمة في العمل مع JSON بلغة C#
JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات يُستخدم على نطاق واسع في تطبيقات الويب الحديثة وواجهات برمجة التطبيقات (API) وملفات التكوين. بالنسبة لمطور C#، فإن القدرة على العمل مع JSON هي مهارة أساسية، خاصة عند إنشاء عملاء REST أو الخدمات المصغرة أو التطبيقات التي تتفاعل مع مصادر بيانات خارجية.
في نظام .NET البيئي، هناك طريقتان رئيسيتان لمعالجة JSON: المكتبة الكلاسيكية Newtonsoft.Json (المعروفة أيضًا باسم Json.NET) والمكتبة المدمجة الحديثة System.Text.Json، التي ظهرت في .NET Core 3.0 وأصبحت المعيار في .NET 5+. تتيح كلتا المكتبتين تنفيذ عمليتين رئيسيتين: التسلسل (Serialization) (تحويل كائن C# إلى سلسلة JSON) وإلغاء التسلسل (Deserialization) (تحويل سلسلة JSON مرة أخرى إلى كائن C#).
في هذه المقالة، سنشرح بالتفصيل كلا النهجين، ونتعلم كيفية تحليل هياكل البيانات المعقدة، ونستعرض أفضل الممارسات للعمل مع JSON في C#.
1. العمليات الأساسية: التسلسل وإلغاء التسلسل
1.1 استخدام Newtonsoft.Json (Json.NET)
Newtonsoft.Json هو المعيار الفعلي للعمل مع JSON في .NET لسنوات عديدة. للبدء، قم بتثبيت الحزمة عبر NuGet:
Install-Package Newtonsoft.Jsonلنلقِ نظرة على فئة بسيطة كمثال:
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public bool IsActive { get; set; }}تسلسل الكائن إلى JSON:
using Newtonsoft.Json;
User user = new User{ Id = 1, Name = "Иван Петров", Email = "ivan@example.com", IsActive = true};
string json = JsonConvert.SerializeObject(user, Formatting.Indented);Console.WriteLine(json);نتيجة التنفيذ:
{ "Id": 1, "Name": "Иван Петров", "Email": "ivan@example.com", "IsActive": true}إلغاء تسلسل JSON مرة أخرى إلى كائن:
string jsonString = @"{""Id"":1,""Name"":""Иван Петров"",""Email"":""ivan@example.com"",""IsActive"":true}";User deserializedUser = JsonConvert.DeserializeObject<User>(jsonString);Console.WriteLine($"المستخدم: {deserializedUser.Name}, البريد الإلكتروني: {deserializedUser.Email}");1.2 استخدام System.Text.Json
بدءًا من .NET Core 3.0، قدمت Microsoft مكتبتها الخاصة System.Text.Json، والتي تم تحسينها من حيث الأداء ولا تتطلب تبعيات خارجية.
التسلسل:
using System.Text.Json;
User user = new User{ Id = 2, Name = "Мария Смирнова", Email = "maria@example.com", IsActive = false};
string json = JsonSerializer.Serialize(user, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);إلغاء التسلسل:
string jsonString = @"{""Id"":2,""Name"":""Мария Смирнова"",""Email"":""maria@example.com"",""IsActive"":false}";User deserializedUser = JsonSerializer.Deserialize<User>(jsonString);Console.WriteLine($"المستخدم: {deserializedUser.Name}");2. العمل مع هياكل البيانات المعقدة
2.1 الكائنات المتداخلة والمجموعات
غالبًا ما يحتوي JSON على هياكل متداخلة. لنلقِ نظرة على مثال مع مصفوفة من طلبات المستخدم:
public class Order{ public int OrderId { get; set; } public decimal Amount { get; set; } public List<string> Items { get; set; }}
public class Customer{ public int CustomerId { get; set; } public string FullName { get; set; } public List<Order> Orders { get; set; }}إلغاء تسلسل JSON المعقد