تحويل JSON إلى فئة C#

الصق عيّنة JSON لتحصل على فئات C# POCO جاهزة للصقها في ملف .cs. تختار الأداة أنواعًا مناسبة، وتعالج الكائنات المتداخلة بتعريفات فئات إضافية، وتدعم أنواع المراجع القابلة للإبطال، وتُصدر سمات System.Text.Json أو Newtonsoft.Json حسب مشروعك.

كيفية تحويل JSON إلى C#

  1. 1

    الصق بيانات JSON

    عيّنة واحدة تكفي. أما استخدام عدة عيّنات فيحسّن استنتاج القابلية للإبطال وأنواع عناصر المصفوفات.

  2. 2

    اختر النمط

    System.Text.Json (.NET 6+) أو Newtonsoft.Json (القديم). أسماء الخصائص بنمط PascalCase مع السمة `[JsonPropertyName]` لبيانات JSON بنمط camelCase.

  3. 3

    اختر إصدار C# المستهدف

    استخدم C# 10+ للسجلات ومساحات الأسماء ذات نطاق الملف، وC# 8 لأنواع المراجع القابلة للإبطال، أو إصدارات أقدم لتحقيق أقصى قدر من التوافق.

  4. 4

    انسخ الفئات

    فئة جذرية واحدة بالإضافة إلى فئات متداخلة لكل شكل من أشكال الكائنات، وكلها في ملف واحد جاهز للإدراج مباشرة في مشروعك.

مثال على الناتج

للمدخل التالي:

{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }

ناتج System.Text.Json (C# 10+):

public class User
{
    [JsonPropertyName("firstName")]
    public string FirstName { get; set; } = default!;

    [JsonPropertyName("age")]
    public int Age { get; set; }

    [JsonPropertyName("emails")]
    public List<string> Emails { get; set; } = new();

    [JsonPropertyName("address")]
    public Address Address { get; set; } = default!;
}

public class Address
{
    [JsonPropertyName("city")]
    public string City { get; set; } = default!;
}

تعيين الأنواع

JSON نوع C#
سلسلة نصية string
عدد صحيح int (أو long للقيم الأكبر من int.MaxValue)
رقم (عشري) double (أو decimal عند الاختيار)
قيمة منطقية bool
null object? (أو مدموج مع الحقل المجاور)
تاريخ ISO-8601 DateTime (أو DateOnly)
سلسلة بصيغة GUID Guid
مصفوفة من السلاسل النصية List<string>
كائن فئة متداخلة

خيارات السمات

  • System.Text.Json ([JsonPropertyName("foo")])، يُفضّل استخدامه في مشاريع .NET 6+ والمشاريع الجديدة.
  • Newtonsoft.Json ([JsonProperty("foo")])، للمشاريع القديمة أو عندما تحتاج إلى ميزات خاصة بـ Newtonsoft.
  • بدون، تتطابق أسماء الخصائص تمامًا مع مفاتيح JSON (يعمل هذا الخيار فقط إذا كانت مفاتيح JSON بنمط PascalCase مسبقًا).

أخطاء شائعة

  • استخدام int لحقل قد يتجاوز الحد. إذا احتوت بيانات JSON على قيم تتجاوز int.MaxValue، فاستخدم long. يرفع المولّد النوع تلقائيًا عندما يرصد قيمًا كبيرة.
  • إغفال [JsonIgnore] للخصائص المحسوبة. إذا أضفت خصائص مساعِدة إلى الفئة المولَّدة، فزيّنها بالسمة [JsonIgnore]؛ وإلا فسيتم تسلسلها عند الإخراج.
  • نسيان التحليل المستقل عن الثقافة. ينبغي إلغاء تسلسل حقول decimal باستخدام CultureInfo.InvariantCulture؛ يفعل System.Text.Json ذلك افتراضيًا، بينما يفعله Newtonsoft عبر الإعدادات العامة.
  • الوثوق بالمولّد اعتمادًا على عيّنة واحدة فقط. يُستنتج احتمال الإبطال وأنواع عناصر المصفوفة مما يراه المولّد. تحقّق دائمًا من صحة تعليقات القابلية للإبطال مقارنةً بالسلوك الفعلي لواجهة برمجة التطبيقات لديك.

الأسئلة الشائعة

للمشاريع الجديدة على .NET 6+، استخدم System.Text.Json؛ فهو أسرع، ومدمج في النظام، ويدعم الآن تقريبًا جميع ميزات Newtonsoft. أما Newtonsoft فاستخدمه للمشاريع القديمة أو عندما تحتاج إلى ميزاته الخاصة (مُحلِّلات العقود المخصصة، وJObject، والمعالجة الديناميكية).

السجلات (records) هي الخيار الاصطلاحي لنماذج DTO غير القابلة للتغيير في C# 10+، إذ توفّر تكافؤًا بالقيمة وصياغة موجزة. أما الفئات فأفضل عندما تحتاج إلى التعديل أو التوافق مع الأنظمة القديمة. وتتيح لك الأداة اختيار أيٍّ منهما.

إذا كان مشروعك يستخدم أنواع المراجع القابلة للإبطال (C# 8+)، فإن الحقول التي تظهر بقيمة null في أي عيّنة تصبح string? وint? وهكذا. وبدون أنواع المراجع القابلة للإبطال، تُبيَّن القابلية للإبطال لأنواع القيم فقط (مثل int?).

لا يمكن تمثيل المصفوفات المختلطة من أشكال كائنات مختلفة بشكل مباشر في C# ذي التنميط الصارم. تستنتج الأداة فئة أساس مشتركة أو (كخيار احتياطي) object؛ وفي حالة المصفوفات المختلطة يُستحسن عادةً إعادة تصميم بنية JSON.

أدوات ذات صلة

الأداة متاحة بلغات أخرى