JSON إلى كلاس C#

توليد كلاسات C# من JSON

جرب مثالاً
اسم الكلاس الجذري:

إدخال JSON

مخرجات C#

يعمل محليًا · آمن للصق الأسرار
ستظهر كلاسات C# هنا…

ما هو تحويل JSON إلى C#؟

تحويل JSON إلى C# هو عملية توليد تعريفات كلاسات C# ذات أنواع محددة من بيانات JSON. عندما يتلقى تطبيق .NET بيانات JSON من واجهة API أو ملف إعداد أو طابور رسائل، يحتاج إلى كلاسات C# لإلغاء تسلسل تلك البيانات إلى كائنات. كتابة هذه الكلاسات يدويًا أمر مضنٍ وعرضة للأخطاء، لا سيما عندما يحتوي JSON على كائنات متداخلة ومصفوفات وأنواع مختلطة.

يفحص مولّد كلاسات JSON إلى C# البنية والقيم في JSON، ويستنتج نوع C# المناسب لكل حقل، وينتج تعريفات الكلاسات مع مُحصِّلات الخصائص وضوابطها وسمات التسلسل. تتبع المخرجات اتفاقيات تسمية .NET: أسماء الخصائص بصيغة PascalCase، وسمات JsonPropertyName لربطها بمفاتيح JSON الأصلية بصيغة camelCase أو snake_case، والاستخدام الصحيح لـ List'<'T'>' للمصفوفات.

هذا التحويل شائع بشكل خاص في واجهات ASP.NET Core البرمجية وAzure Functions وأي خدمة .NET تستهلك بيانات JSON خارجية. بدلًا من استخدام dynamic أو Dictionary'<'string, object'>'، تمنحك الكلاسات ذات الأنواع المحددة السلامة في وقت التصريف ودعم IntelliSense والحماية من الأخطاء الإملائية في أسماء الحقول التي لن تظهر عادةً إلا في وقت التشغيل. الصق JSON في هذه الأداة واحصل على كلاسات C# جاهزة للاستخدام فورًا.

لماذا تستخدم مولّد JSON إلى C#؟

كتابة كلاسات نماذج C# يدويًا من عينات JSON تستغرق وقتًا وتُدخل أخطاء بشرية. يتولى المولّد الأجزاء المتكررة حتى تتفرغ للمنطق التجاري.

توليد الكلاسات فورًا
الصق JSON واحصل على كلاسات C# كاملة في أقل من ثانية. بدون كتابة خصائص يدويًا، ولا نسيان أي حقل.
🔒
معالجة تحافظ على خصوصيتك
يعمل التحويل بالكامل في متصفحك. لا تغادر بيانات JSON جهازك أبدًا، فتبقى مفاتيح API والرموز المميزة والبيانات الشخصية طيّ الكتمان.
📋
ربط السمات بشكل صحيح
تتضمن الكلاسات المولّدة سمات JsonPropertyName التي تربط خصائص C# بصيغة PascalCase بأسماء مفاتيح JSON الأصلية، مما يمنع أخطاء إلغاء التسلسل.
🌐
بدون حساب أو تثبيت
افتح الصفحة والصق JSON. لا حزم NuGet للتثبيت، ولا إضافات Visual Studio للضبط، ولا نماذج تسجيل للملء.

حالات استخدام تحويل JSON إلى C#

تكامل واجهات API الخلفية
ولّد نماذج الطلبات والاستجابات لواجهات REST البرمجية التابعة لجهات خارجية. الصق JSON النموذجي من توثيق API واحصل على كلاسات C# جاهزة لاستدعاءات HttpClient.
وحدات التحكم في ASP.NET Core
أنشئ كلاسات النماذج لمعاملات توابع الإجراءات. عندما تقبل نقطة النهاية لديك جسم JSON، يمنحك الكلاس المولّد ربط النماذج والتحقق من صحتها تلقائيًا.
Azure Functions والأنظمة عديمة الخادم
أنشئ ربط المدخلات والمخرجات لـAzure Functions التي تعالج رسائل JSON من قوائم الانتظار ومحاور الأحداث أو مشغلات HTTP.
إلغاء تسلسل الإعدادات
حوّل أقسام appsettings.json أو ملفات الإعداد الخارجية إلى كلاسات خيارات C# ذات أنواع محددة للاستخدام مع IOptions'<'T'>' في حقن التبعيات.
بذر قواعد البيانات والترحيل
حوّل ملفات بيانات JSON الثابتة إلى كائنات C# لبيانات بذر Entity Framework وإعداد اختبارات التكامل أو مخطوطات ترحيل البيانات.
تعلّم أنظمة أنواع C#
يستطيع الطلاب والمطورون الجدد على .NET رؤية كيف تتعيّن أنواع JSON إلى أنواع C#، وفهم موصلات الخصائص، والتعرف على سمات التسلسل بالمثال.

مرجع تعيين أنواع JSON إلى C#

كل نوع قيمة JSON يتعيّن إلى نوع C# محدد. يحلل المولّد القيم الفعلية لاختيار النوع الأدق. فمثلًا، رقم JSON بلا فاصلة عشرية يصبح int، بينما 3.14 يصبح double. تُنتج قيم null النوع object? (نوع مرجعي قابل للإلغاء) لأن النوع الفعلي لا يمكن استنتاجه من null وحده.

نوع JSONمثالنوع C#
string"hello"string
number (int)42int
number (float)3.14double
booleantrue, falsebool
nullnullobject?
object{"key": "value"}nested class
array[1, 2, 3]List<int>
array of objects[{"id": 1}]List<ClassName>

System.Text.Json مقابل Newtonsoft.Json

يوفر .NET مكتبتين رئيسيتين لتسلسل JSON. تستخدم الكلاسات المولّدة من هذه الأداة سمات System.Text.Json (JsonPropertyName)، وهو الخيار المدمج منذ .NET Core 3.0. إذا كان مشروعك يستخدم Newtonsoft.Json، يمكنك استبدال السمات.

System.Text.Json
مدمج في .NET منذ Core 3.0. أسرع وأقل استهلاكًا للذاكرة من Newtonsoft. يستخدم [JsonPropertyName] لربط الخصائص. الخيار الافتراضي لمشاريع .NET 6+ الجديدة. لا يدعم جميع ميزات Newtonsoft مثل JsonPath أو معالجة المراجع دون إعداد إضافي.
Newtonsoft.Json
مكتبة .NET JSON الأصلية (Json.NET). تستخدم [JsonProperty] لربط الخصائص. تدعم سيناريوهات أكثر تقدمًا: التسلسل متعدد الأشكال واستعلامات JsonPath ومحوّلات مخصصة بمرونة أكبر. لا تزال شائعة في قواعد الكود القديمة والمشاريع التي تحتاج إلى ميزات يفتقر إليها System.Text.Json.

أمثلة برمجية

توضح هذه الأمثلة كيفية تعريف كلاسات C# المولّدة من JSON واستخدامها، بالاستعانة بكلتا مكتبتي التسلسل الرئيسيتين، إضافةً إلى كيفية أتمتة التوليد من سطر الأوامر.

C# (System.Text.Json)
using System.Text.Json;

var json = """{"id": 1, "name": "Alice", "active": true}""";
var user = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(user.Name); // → "Alice"

public class User
{
    [JsonPropertyName("id")]
    public int Id { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("active")]
    public bool Active { get; set; }
}
C# (Newtonsoft.Json)
using Newtonsoft.Json;

var json = @"{""id"": 1, ""name"": ""Alice"", ""scores"": [98, 85]}";
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Scores[0]); // → 98

public class User
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("scores")]
    public List<int> Scores { get; set; }
}
JavaScript (quicktype)
// Install: npm install -g quicktype
// Generate C# classes from JSON:
// quicktype --lang csharp --src data.json --out Models.cs

// From stdin:
// echo '{"id": 1, "name": "Alice"}' | quicktype --lang csharp

// Output:
// public class Root
// {
//     [JsonPropertyName("id")]
//     public int Id { get; set; }
//
//     [JsonPropertyName("name")]
//     public string Name { get; set; }
// }
Python (generate C# from JSON)
import json

def json_to_csharp(data: dict, class_name: str = "Root") -> str:
    lines = [f"public class {class_name}", "{"]
    type_map = {str: "string", int: "int", float: "double", bool: "bool"}

    for key, value in data.items():
        cs_type = type_map.get(type(value), "object")
        prop = key[0].upper() + key[1:]  # PascalCase
        lines.append(f'    [JsonPropertyName("{key}")]')
        lines.append(f'    public {cs_type} {prop} {{ get; set; }}')
        lines.append('')
    lines.append("}")
    return "\n".join(lines)

data = json.loads('{"id": 1, "name": "Alice", "active": true}')
print(json_to_csharp(data))

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

ما الفرق بين JsonPropertyName وJsonProperty؟
JsonPropertyName هي السمة من System.Text.Json، المُسلسِل المدمج في .NET. أما JsonProperty فمن Newtonsoft.Json (Json.NET)، وهي مكتبة تابعة لجهة خارجية. كلتاهما تربط اسم خاصية C# باسم حقل JSON، لكنهما تنتميان إلى مساحتي أسماء مختلفتين وليستا قابلتين للتبادل. استخدم JsonPropertyName لمشاريع .NET 6+ الجديدة، وJsonProperty إذا كان مشروعك يعتمد بالفعل على Newtonsoft.
كيف يتعامل المولّد مع كائنات JSON المتداخلة؟
كل كائن متداخل يصبح كلاس C# مستقلًا. تستخدم الخاصية في الكلاس الأصلي الكلاس المتداخل كنوع لها. فمثلًا، إذا كان JSON يحتوي على حقل "address" يضم كائنًا بحقلَي "street" و"city"، ينشئ المولّد كلاس Address ويُعيّن نوع الخاصية Address في الكلاس الأصلي.
ماذا يحدث مع مصفوفات JSON التي تحتوي على أنواع مختلطة؟
يستنتج المولّد نوع عنصر المصفوفة من أول عنصر غير null. إذا احتوت المصفوفة على أنواع مختلطة (نصوص وأرقام معًا)، يرجع النوع المولّد إلى List'<'object'>'. في الواقع العملي، نادرًا ما تخلط استجابات API المنظمة جيدًا بين الأنواع داخل مصفوفة واحدة.
هل يمكنني استخدام الكلاسات المولّدة مع Entity Framework؟
نعم، لكنك ستحتاج إلى إضافة تعليقات توضيحية خاصة بـEF مثل [Key] و[Required] و[Column]. تمنحك الكلاسات المولّدة بنية الخصائص؛ عاملها كهيكل أولي وأضف إعداد EF فوقه. يتوقع EF أيضًا مُنشئًا بلا معاملات، وهو ما توفره الكلاسات المولّدة بشكل افتراضي.
كيف تُحوَّل قيم null في JSON إلى C#؟
تُنتج قيمة null في JSON النوع object? لأن المولّد لا يستطيع تحديد النوع المقصود من null وحده. بعد التوليد، يجب استبدال object? بالنوع القابل للإلغاء الصحيح (string? أو int? أو كلاس محدد؟) بناءً على معرفتك بمخطط API.
هل يُعيَّن JSON بصيغة camelCase تلقائيًا إلى خصائص C# بصيغة PascalCase؟
نعم. يُحوّل المولّد مفاتيح JSON مثل "firstName" إلى خصائص بصيغة PascalCase مثل FirstName ويضيف سمة [JsonPropertyName("firstName")]. هذا يضمن أن المُسلسِل يربط بين اتفاقيتَي التسمية تلقائيًا أثناء التسلسل وإلغائه.
كيف أتعامل مع JSON الذي يحتوي على حقول اختيارية في C#؟
اجعل نوع الخاصية قابلًا للإلغاء (مثل string? أو int?) وعيّن قيمة افتراضية. مع System.Text.Json، يمكنك أيضًا ضبط JsonSerializerOptions.DefaultIgnoreCondition لتخطي قيم null أثناء التسلسل. ينتج المولّد أنواعًا غير قابلة للإلغاء بشكل افتراضي، لذا راجع قابلية الإلغاء وعدّلها وفقًا لعقد API الخاص بك.