فصل 35 از 40 درس 1 از 1

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» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.