Serialization با JSON
Serialization با JSON
بخشی از آموزش جامع C# و .NET 10
محتوای درس Serialization با JSON
Serialization تبدیل Object به فرم قابل ذخیره یا انتقال و Deserialization بازسازی داده از آن فرم است. System.Text.Json کتابخانه استاندارد و پرکاربرد .NET برای JSON است.
۱. Serialize و Deserialize
JsonSerializer برای تبدیل Object به JSON و برعکس استفاده میشود. مدل مقصد باید با ساختار داده سازگار باشد.
مثال
string json=System.Text.Json.JsonSerializer.Serialize(new {Id=1,Name="Mouse"});
Console.WriteLine(json);در این مثال، مفهوم «Serialize و Deserialize» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۲. JsonSerializerOptions
Naming Policy، Indentation، Ignore Condition و Converterها رفتار Serialization را کنترل میکنند.
مثال
var opt=new System.Text.Json.JsonSerializerOptions{WriteIndented=true};در این مثال، مفهوم «JsonSerializerOptions» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۳. Property Name
JsonPropertyName برای نگاشت نام متفاوت میان مدل C# و JSON قابل استفاده است.
مثال
class Product { public decimal Price {get; private set;} public void SetPrice(decimal p)=>Price=p; }در این مثال، مفهوم «Property Name» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۴. Enum و Converter
Converterها امکان کنترل نمایش Typeهای خاص مانند Enum یا تاریخ را فراهم میکنند.
مثال
string input = "42";
int number = Convert.ToInt32(input);
Console.WriteLine(number * 2);در این مثال، مفهوم «Enum و Converter» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۵. امنیت و قرارداد
ورودی JSON خارجی باید Validate شود و Deserialize کردن آن به معنی معتبر بودن دامنهای داده نیست.
مثال
try{_ = System.Text.Json.JsonSerializer.Deserialize<int>("invalid");}catch(System.Text.Json.JsonException){}در این مثال، مفهوم «امنیت و قرارداد» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۶. مثالهای عملی
var options = new JsonSerializerOptions
{
WriteIndented = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
string json = JsonSerializer.Serialize(product, options);
Product? restored = JsonSerializer.Deserialize<Product>(json, options);این نمونه عملی چند مفهوم فصل را در کنار هم قرار میدهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.
۷. خطاهای رایج
• فرض معتبر بودن Object پس از Deserialize
• ذخیره اطلاعات حساس بدون طراحی امنیتی
• وابسته کردن Domain Model به جزئیات JSON در همه لایهها
۸. نکات اجرایی
• نامها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.
• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.
• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.
۹. تمرین عملی
لیستی از محصولات را در products.json ذخیره کنید و هنگام اجرای بعدی برنامه آن را بازیابی کنید.
۱۰. جمعبندی
در این فصل، مبانی «Serialization با JSON» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصلهای بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم میکند.