ToolDeck

JSON به کلاس C#

تولید کلاس‌های C# از JSON

یک مثال امتحان کنید
نام کلاس اصلی:

ورودی JSON

خروجی C#

به‌صورت محلی اجرا می‌شود · جای‌گذاری اسرار امن است
کلاس‌های C# اینجا نمایش داده می‌شوند…

تبدیل JSON به C# چیست؟

تبدیل JSON به C# فرایند تولید تعریف کلاس‌های C# با strongly typed از داده‌های JSON است. وقتی یک برنامه .NET داده JSON از یک API، فایل پیکربندی یا صف پیام دریافت می‌کند، برای تبدیل آن داده به اشیا به کلاس‌های C# نیاز دارد. نوشتن این کلاس‌ها به‌صورت دستی خسته‌کننده و مستعد خطاست، به‌ویژه وقتی JSON شامل اشیاء تودرتو، آرایه‌ها و نوع‌های ترکیبی است.

یک مولد کلاس C# از JSON ساختار و مقادیر JSON شما را بررسی می‌کند، نوع مناسب C# را برای هر فیلد استنتاج می‌کند، و تعریف کلاس‌ها را با accessor های ویژگی و ویژگی‌های سریال‌سازی تولید می‌کند. خروجی از قراردادهای نام‌گذاری .NET پیروی می‌کند: نام ویژگی‌ها به‌صورت PascalCase، ویژگی‌های JsonPropertyName برای نگاشت به کلیدهای JSON اصلی با فرمت camelCase یا snake_case، و استفاده صحیح از List'<'T'>' برای آرایه‌ها.

این تبدیل به‌ویژه در web API های 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#

یکپارچه‌سازی Backend API
مدل‌های درخواست و پاسخ برای REST API های شخص ثالث تولید کنید. JSON نمونه را از مستندات API پیست کنید و کلاس‌های C# آماده استفاده برای فراخوانی‌های HttpClient دریافت کنید.
کنترلرهای ASP.NET Core
کلاس‌های مدل برای پارامترهای متد action ایجاد کنید. وقتی endpoint شما یک بدنه JSON می‌پذیرد، کلاس تولیدشده اتصال خودکار مدل و اعتبارسنجی را فراهم می‌کند.
Azure Functions و Serverless
اتصالات ورودی و خروجی برای Azure Functions که پیام‌های JSON از صف‌ها، event hub ها یا HTTP trigger ها پردازش می‌کنند بسازید.
تبدیل سریال پیکربندی
بخش‌های appsettings.json یا فایل‌های پیکربندی خارجی را به کلاس‌های options نوع‌بندی‌شده C# برای استفاده با IOptions'<'T'>' در تزریق وابستگی تبدیل کنید.
بارگذاری اولیه و مهاجرت پایگاه داده
فایل‌های fixture JSON را به اشیاء C# برای داده‌های بارگذاری اولیه Entity Framework، راه‌اندازی تست‌های یکپارچه‌سازی یا اسکریپت‌های مهاجرت داده تبدیل کنید.
یادگیری سیستم نوع C#
دانشجویان و توسعه‌دهندگانی که تازه با .NET آشنا می‌شوند می‌توانند ببینند چگونه نوع‌های JSON به نوع‌های C# نگاشت می‌شوند، accessor های ویژگی را درک کنند، و از طریق مثال درباره ویژگی‌های سریال‌سازی بیاموزند.

جدول مرجع نگاشت نوع JSON به C#

هر نوع مقدار JSON به یک نوع C# خاص نگاشت می‌شود. مولد مقادیر واقعی را تحلیل می‌کند تا دقیق‌ترین نوع را انتخاب کند. به‌عنوان مثال، یک عدد JSON بدون نقطه اعشار به int تبدیل می‌شود، در حالی که 3.14 به double تبدیل می‌شود. مقادیر null نوع object? (نوع مرجع nullable) تولید می‌کنند زیرا نوع واقعی را نمی‌توان تنها از 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 به‌صورت داخلی در .NET موجود است. سریع‌تر و با تخصیص حافظه کمتر نسبت به Newtonsoft. از [JsonPropertyName] برای نگاشت ویژگی‌ها استفاده می‌کند. انتخاب پیش‌فرض برای پروژه‌های جدید .NET 6+. بدون پشتیبانی داخلی از تمام ویژگی‌های Newtonsoft مانند JsonPath یا مدیریت مرجع.
Newtonsoft.Json
کتابخانه اصلی JSON در .NET (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 نگاشت می‌کنند، اما به فضاهای نام متفاوت تعلق دارند و قابل تعویض نیستند. برای پروژه‌های جدید .NET 6+ از JsonPropertyName و اگر پروژه شما از پیش به Newtonsoft وابسته است از JsonProperty استفاده کنید.
مولد چگونه اشیاء JSON تودرتو را مدیریت می‌کند؟
هر شیء تودرتو کلاس C# مخصوص خود را دریافت می‌کند. ویژگی در کلاس والد از کلاس تودرتو به‌عنوان نوع استفاده می‌کند. به‌عنوان مثال، اگر JSON شما یک فیلد «address» داشته باشد که شامل شیئی با «street» و «city» است، مولد یک کلاس Address ایجاد می‌کند و ویژگی را در کلاس والد به‌صورت Address نوع‌بندی می‌کند.
با آرایه‌های JSON که شامل نوع‌های ترکیبی هستند چه اتفاقی می‌افتد؟
مولد نوع عنصر آرایه را از اولین عنصر غیر-null استنتاج می‌کند. اگر آرایه شامل نوع‌های ترکیبی باشد (رشته‌ها و اعداد با هم)، نوع تولیدشده به List'<'object'>' برمی‌گردد. در عمل، پاسخ‌های API با ساختار مناسب به‌ندرت نوع‌ها را در یک آرایه واحد مخلوط می‌کنند.
آیا می‌توانم از کلاس‌های تولیدشده با Entity Framework استفاده کنم؟
بله، اما باید annotation های مخصوص EF مانند [Key]، [Required] یا [Column] را اضافه کنید. کلاس‌های تولیدشده ساختار ویژگی‌ها را فراهم می‌کنند؛ آن‌ها را به‌عنوان scaffold در نظر بگیرید و پیکربندی EF را بر روی آن اضافه کنید. EF همچنین یک سازنده بدون پارامتر انتظار دارد که کلاس‌های تولیدشده به‌طور پیش‌فرض دارند.
مقادیر null در JSON چگونه به C# تبدیل می‌شوند؟
یک مقدار null در JSON نوع object? تولید می‌کند زیرا مولد نمی‌تواند نوع مورد نظر را تنها از null تعیین کند. پس از تولید، باید object? را با نوع nullable صحیح (string?، int?، یا یک کلاس خاص?) بر اساس دانش شما از schema API جایگزین کنید.
آیا JSON با فرمت camelCase به‌طور خودکار به ویژگی‌های C# با فرمت PascalCase نگاشت می‌شود؟
بله. مولد کلیدهای JSON مانند «firstName» را به ویژگی‌های PascalCase مانند FirstName تبدیل می‌کند و یک ویژگی [JsonPropertyName("firstName")] اضافه می‌کند. این اطمینان می‌دهد که سریال‌ساز به‌طور خودکار در طول serialization و deserialization بین دو قرارداد نام‌گذاری نگاشت می‌کند.
چگونه با JSON که فیلدهای اختیاری دارد در C# کار کنم؟
نوع ویژگی را nullable کنید (مثلاً string? یا int?) و یک مقدار پیش‌فرض تنظیم کنید. با System.Text.Json همچنین می‌توانید JsonSerializerOptions.DefaultIgnoreCondition را برای نادیده گرفتن مقادیر null در طول سریال‌سازی پیکربندی کنید. مولد به‌طور پیش‌فرض نوع‌های غیر-nullable تولید می‌کند، بنابراین nullable بودن را بر اساس قرارداد API خود بررسی و تنظیم کنید.