العمل مع JSON في C#: التحليل والتسلسل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في العمل مع JSON في C#

\n\n

JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات يُستخدم على نطاق واسع في تطوير الويب وتطبيقات الهاتف المحمول والخدمات المصغرة. بالنسبة لمطور C#، فإن القدرة على العمل مع JSON هي مهارة أساسية. في هذه المقالة، سنشرح أساسيات تحليل (إلغاء التسلسل) وتسلسل JSON باستخدام مساحة الأسماء الحديثة System.Text.Json، المضمنة في .NET Core 3.0 والإصدارات الأحدث، بالإضافة إلى .NET 5/6/7/8.

\n\n

سنغطي:

\n
    \n
  • ما هو التسلسل وإلغاء التسلسل
  • \n
  • كيفية تحويل كائن C# إلى سلسلة JSON
  • \n
  • كيفية قراءة JSON وتحويله مرة أخرى إلى كائن
  • \n
  • العمل مع الكائنات المتداخلة والمجموعات
  • \n
  • معالجة الأخطاء وتكوين التسلسل
  • \n
\n\n

جميع أمثلة الكود مكتوبة لتطبيق وحدة تحكم C# (.NET 6+). يمكنك نسخها وتشغيلها فورًا.

\n\n

1. أساسيات التسلسل: كائن → JSON

\n\n

التسلسل هو عملية تحويل كائن (أو بنية بيانات) إلى سلسلة بتنسيق JSON. في C#، يتم استخدام الفئة JsonSerializer من مساحة الأسماء System.Text.Json.

\n\n

إنشاء نموذج بسيط

\n\n

لنفترض أن لدينا الفئة Person:

\n\n
public class Person\n{\n    public string Name { get; set; }\n    public int Age { get; set; }\n    public string Email { get; set; }\n}
\n\n

تسلسل الكائن

\n\n

الآن سننشئ مثيلًا ونحوله إلى JSON:

\n\n
using System.Text.Json;\n\nPerson person = new Person\n{\n    Name = "إيفان بيتروف",\n    Age = 30,\n    Email = "ivan@example.com"\n};\n\nstring jsonString = JsonSerializer.Serialize(person);\nConsole.WriteLine(jsonString);
\n\n

النتيجة:

\n\n
{"Name":"إيفان بيتروف","Age":30,"Email":"ivan@example.com"}
\n\n

بشكل افتراضي، يستخدم JsonSerializer تنسيق camelCase لأسماء الخصائص (الحرف الأول صغير)، ولكن في مثالنا بقيت الأسماء بحرف كبير لأننا لم نغير الإعدادات. إذا كنت بحاجة إلى camelCase صارم، استخدم JsonSerializerOptions:

\n\n
var options = new JsonSerializerOptions\n{\n    PropertyNamingPolicy = JsonNamingPolicy.CamelCase\n};\nstring jsonCamelCase = JsonSerializer.Serialize(person, options);\nConsole.WriteLine(jsonCamelCase);\n// {"name":"إيفان بيتروف","age":30,"email":"ivan@example.com"}
\n\n

2. إلغاء التسلسل: JSON → كائن

\n\n

إلغاء التسلسل هو العملية العكسية: نأخذ سلسلة JSON ونحولها إلى كائن C#.

\n\n

مثال بسيط على إلغاء التسلسل

\n\n

لنفترض أننا تلقينا JSON من API:

\n\n
string jsonFromApi = @"{""Name"":""آنا سميرنوفا"",""Age"":25,""Email"":""anna@test.com""}";\n\nPerson? personFromJson = JsonSerializer.Deserialize<Person>(jsonFromApi);\n\nif (personFromJson != null)\n{\n    Console.WriteLine($"الاسم: {personFromJson.Name}, العمر: {personFromJson.Age}");\n}
\n\n

لاحظ علامة ? بعد النوع Person — وهي تعليق توضيحي للقيم القابلة للعدم (nullable) يشير إلى أن النتيجة قد تكون null (على سبيل المثال، إذا كان JSON غير صحيح).

\n\n

العمل مع المصفوفات والقوائم

\n\n

غالبًا ما يحتوي JSON على مجموعات من الكائنات. لنفترض أن لدينا مصفوفة من المستخدمين:

\n\n
string jsonArray = @"\n[\n    {""Name"":""أوليغ"",""Age"":35},\n    {""Name"":""ماريا"",""Age"":28},\n    {""Name"":""دميتري"",""Age"":42}\n]";\n\nList<Person>? people = JsonSerializer.Deserialize<List<Person>>(jsonArray);\n\nif (people != null)\n{\n    foreach (var p in people)\n    {\n        Console.WriteLine($"{p.Name} - {p.Age} سنة");\n    }\n}
\n\n

3. العمل مع الكائنات المتداخلة والهياكل المعقدة

\n\n

نادرًا ما تكون بيانات JSON الحقيقية مسطحة. سننظر في

المدونات

توصيات الكتب