JSON إلى class في C#
أنشئ تعريفات class في C# من JSON
نبذة عن JSON إلى class في C#
تكتب أداة JSON إلى class في C# تعريفات class للنماذج في C# انطلاقا من عينة JSON أو من JSON Schema باستخدام quicktype-core، داخل متصفحك. يوضع الكود في مساحة الأسماء التي تختارها (App افتراضيا) مع عبارات using الخاصة بالمسلسل: System.Text.Json، مع سمة [JsonPropertyName] على كل خاصية، أو Newtonsoft.Json، مع [JsonProperty]. يصبح كل كائن متداخل تعريف class من نوع public partial، أو record إذا حددت «تعريفات record (C# 9 أو أحدث)»؛ ويأخذ تعريف المستوى الأعلى «اسم الفئة» (Root افتراضيا). تكتب الخصائص بصيغة PascalCase وتحتفظ كل منها بمفتاحها الأصلي في سمتها. الأعداد الصحيحة من نوع long، والأعداد العشرية من نوع double أو decimal، وتصبح المصفوفات مصفوفات مثل Item[] أو قوائم مثل List<Item>. الخصائص الغائبة عن بعض عناصر المصفوفة تكون nullable ولا تكتب عندما تكون قيمتها null. القيمة التي لها نوعان، مثل رقم في عنصر ونص في عنصر آخر، تضيف بنية اتحاد (struct) وفئات JsonConverter التي تحتاجها. يمكن لصق JSON أو فتحه من ملف .json أو .txt.
مثال
طلب شراء مع بنوده؛ الحقل note لا يظهر إلا في بند واحد، لذا يصبح nullable.
مدخل JSON
{"orderId": 1001, "total": 49.90, "paid": true,
"items": [{"sku": "A1", "qty": 2}, {"sku": "B7", "qty": 1, "note": "gift"}]}مخرج C#
namespace App
{
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Globalization;
public partial class Root
{
[JsonPropertyName("orderId")]
public long OrderId { get; set; }
[JsonPropertyName("total")]
public double Total { get; set; }
[JsonPropertyName("paid")]
public bool Paid { get; set; }
[JsonPropertyName("items")]
public Item[] Items { get; set; }
}
public partial class Item
{
[JsonPropertyName("sku")]
public string Sku { get; set; }
[JsonPropertyName("qty")]
public long Qty { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("note")]
public string? Note { get; set; }
}
}كيفية إنشاء تعريفات class في C# من JSON
- 1الصق عينة JSON في «مدخل JSON»، أو انقر على «فتح ملف» لتحميل ملف .json أو .txt. لاستخدام JSON Schema، اختر «JSON Schema» في «المصدر».
- 2اختر «المسلسل»، ثم اكتب في «اسم الفئة» و«مساحة الأسماء» ما يستخدمه مشروعك.
- 3انقر على «تحويل» للحصول على تعريفات class في «مخرج C#».
- 4انقر على «نسخ»، أو على «تنزيل» لحفظ الكود في الملف «Model.cs».
الصيغ والحدود
- الإدخال
- كائن JSON أو مصفوفة كائنات، أو JSON Schema، ملصق أو مفتوح من ملف .json أو .txt
- الإخراج
- تعريفات class أو record في C# داخل مساحة الأسماء التي تختارها (App افتراضيا)، محفوظة في Model.cs
- المسلسل
- System.Text.Json: سمة [JsonPropertyName] على كل خاصية، و[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] على الخصائص الاختيارية؛ أو Newtonsoft.Json: سمة [JsonProperty]، مع NullValueHandling.Ignore على الخصائص الاختيارية
- الأنواع
- long، وdouble أو decimal، وbool، وstring، والمصفوفات (T[]) أو القوائم (List<T>)؛ object لمفتاح قيمته null في كل العينة؛ بنية اتحاد (struct) عندما يكون للقيمة نوعان؛ ومن JSON Schema أيضا تعدادات enum وDateTimeOffset
أين يعالج نص JSON الخاص بك
تنشأ تعريفات class بكود JavaScript يعمل على جهازك: لا يرفع نص JSON الذي تلصقه أو تفتحه، ولا كود C# الناتج. تحمل مكتبة quicktype عند أول نقرة على «تحويل». عندما تعرض الصفحة خطأ، يتلقى سجل الأخطاء لدينا نصه، بعد حذف المقاطع المقتبسة والأرقام الطويلة وعناوين الويب والبريد الإلكتروني منه، مع اسم الأداة واسم متصفحك وإصداره.
الأسئلة الشائعة
هل تعمل مع Newtonsoft.Json (Json.NET)؟
نعم. اختر Newtonsoft.Json في «المسلسل»: تحصل كل خاصية عندئذ على سمة [JsonProperty] بمفتاحها الأصلي، وتضيف الخصائص الاختيارية NullValueHandling = NullValueHandling.Ignore. اقرأ JSON باستخدام JsonConvert.DeserializeObject<Root>(json)، مع إضافة Converter.Settings عندما يحتوي المخرج عليه.
هل يمكنني البدء من JSON Schema؟
نعم. اختر «JSON Schema» في «المصدر»، ثم الصق المخطط أو افتحه. تأتي الأنواع والخصائص الإلزامية وتعدادات enum وتنسيقات date-time من المخطط. لا يتبع المرجع $ref إلا داخل المستند (#/definitions/… أو #/$defs/…): لا ينزل أبدا مخطط موجود في عنوان آخر، وتذكر الصفحة ذلك.
هل يمكنني الحصول على تعريفات record بدلا من class؟
نعم. حدد «تعريفات record (C# 9 أو أحدث)»: يصبح كل نوع نموذج تعريف record من نوع public partial بالخصائص والسمات نفسها، وهذا يتطلب C# 9 أو أحدث (.NET 5 أو أحدث). تبقى بنى الاتحاد وفئات التحويل كما هي.
هل تقرأ تعريفات class نص JSON الخاص بي كما هي؟
نعم، عندما يحتفظ كل مفتاح بنوع واحد: تربط JsonSerializer.Deserialize كل خاصية بمفتاحها الأصلي عبر [JsonPropertyName]. عندما تخلط قيمة بين عدة أنواع، مرر Converter.Settings، الذي يحتوي عليه المخرج عندئذ، وسيطا ثانيا. تأتي الأنواع من عينتك فقط، فتحقق منها على بيانات أكثر.
هل يكون نوع الخاصية object عندما تكون قيمتها null دائما؟
نعم. عندما تكون قيمة المفتاح null في كل عناصر عينتك، لا يمكن استنتاج أي نوع، فيصبح object. الصق مثالا يحمل فيه المفتاح قيمة حقيقية، أو حدد النوع بنفسك، مثل string? لنص اختياري.
هل يمكنني استخدام int بدلا من long؟
نعم. تكتب الأعداد الصحيحة دائما بالنوع long حتى تتسع للقيم الكبيرة؛ إذا كانت قيمك صغيرة، فاستبدل long بـ int يدويا، وتستمر السمة وربط المفتاح في العمل.
نصائح وحيل
- ✓الصق مصفوفة فيها عدة عناصر حتى تصبح الخصائص الغائبة أحيانا nullable.
- ✓اختر decimal في «الأعداد العشرية» للأسعار والمبالغ: لا يستطيع double تمثيل قيم مثل 0.1 بدقة.