آموزش کار با JSON در سی شارپ – راهنمای جامع
در دنیای توسعه نرمافزار، JSON (JavaScript Object Notation) یکی از پرکاربردترین فرمتهای تبادل داده است. این فرمت به دلیل سادگی و قابلیت خوانایی توسط انسانها و ماشینها، بهسرعت به یکی از استانداردهای رایج در برنامهنویسی تبدیل شده است. اما چطور میتوان با JSON در سی شارپ کار کرد؟ در این مقاله به شما آموزش خواهیم داد که چگونه با استفاده از سی شارپ بهراحتی دادههای JSON را بخوانید، تحلیل کنید و آنها را مدیریت نمایید.
JSON چیست و چرا از آن استفاده میکنیم؟
JSON یک فرمت تبادل داده است که بر پایهی جاوااسکریپت توسعه یافته و به عنوان یک استاندارد جهانی شناخته میشود. JSON بهصورت ساختاری ساده و قابل خواندن برای انسان طراحی شده است که به شما اجازه میدهد تا بهراحتی دادهها را بین سرورها و کلاینتها تبادل کنید. این فرمت به دلیل قابلیت استفاده در اکثر زبانهای برنامهنویسی، محبوبیت زیادی در دنیای توسعه یافته است.
در ادامه این بخش از مطلب نحوه کار با جسیون در سی شارپ را به صورت کامل مورد بررسی و بازبینی قرار خواهیم داد و در آخر مثالی عملی ارائه خواهیم کرد.
چرا باید JSON را در سی شارپ یاد بگیریم؟
در بسیاری از پروژههای نرمافزاری، نیاز است که دادهها از سرورهای خارجی به برنامهی شما ارسال یا دریافت شود. این دادهها معمولاً به فرمت JSON ارسال میشوند. از این رو، آشنایی با نحوهی کار با JSON در سی شارپ به شما کمک میکند تا بتوانید برنامههای قدرتمندتر و انعطافپذیرتری ایجاد کنید.
نحوهی خواندن فایل جیسون در سی شارپ
برای شروع، باید بدانیم که چطور میتوان یک فایل JSON را در سی شارپ خواند. در این بخش، از کتابخانهی Newtonsoft.Json استفاده خواهیم کرد که یکی از محبوبترین کتابخانهها برای کار با JSON در سی شارپ است.
نصب کتابخانهی Newtonsoft.Json:
قبل از هر چیز، باید کتابخانهی Newtonsoft.Json را نصب کنید. برای این کار میتوانید از NuGet Package Manager استفاده کنید. دستور زیر را در کنسول NuGet وارد کنید:
Install-Package Newtonsoft.Json
خواندن و تحلیل فایل JSON
فرض کنید یک فایل JSON به نام data.json دارید که حاوی دادههای زیر است:
{ "name": "Ali", "age": 30, "city": "Tehran" }
برای خواندن این فایل و تبدیل آن به یک شیء در سی شارپ، از کد زیر استفاده کنید:
using System; using System.IO; using Newtonsoft.Json; class Program { static void Main() { string json = File.ReadAllText("data.json"); Person person = JsonConvert.DeserializeObject(json); Console.WriteLine($"Name: {person.Name}"); Console.WriteLine($"Age: {person.Age}"); Console.WriteLine($"City: {person.City}"); } } public class Person { public string Name { get; set; } public int Age { get; set; } public string City { get; set; } }
در این مثال، ابتدا محتویات فایل JSON را بهصورت یک رشته میخوانیم و سپس با استفاده از متد JsonConvert.DeserializeObject این رشته را به یک شیء Person تبدیل میکنیم.
پیشنهاد مطالعه: آموزش متدهای سی شارپ با مثالهای عملی
فراخوانی جیسون در سی شارپ
گاهی اوقات نیاز است که دادههای JSON را از یک API فراخوانی کنید. در این بخش، نحوهی فراخوانی JSON از یک API و استفاده از آن در سی شارپ را بررسی میکنیم.
فراخوانی JSON با استفاده از HttpClient:
برای این کار، میتوانید از کلاس HttpClient در سی شارپ استفاده کنید. مثال زیر نحوهی انجام این کار را نشان میدهد:
using System; using System.Net.Http; using System.Threading.Tasks; using Newtonsoft.Json; class Program { static async Task Main() { HttpClient client = new HttpClient(); string response = await client.GetStringAsync("https://api.example.com/data"); Person person = JsonConvert.DeserializeObject(response); Console.WriteLine($"Name: {person.Name}"); Console.WriteLine($"Age: {person.Age}"); Console.WriteLine($"City: {person.City}"); } } public class Person { public string Name { get; set; } public int Age { get; set; } public string City { get; set; } }
در این مثال، دادههای JSON از یک API فراخوانی شده و سپس به یک شیء Person تبدیل میشود.
تبدیل JSON به آرایه در سی شارپ
در بسیاری از موارد، دادههای JSON بهصورت یک آرایه هستند. برای مثال:
[ { "name": "Ali", "age": 30, "city": "Tehran" }, { "name": "Sara", "age": 25, "city": "Mashhad" } ]
برای تبدیل این JSON به آرایهای از اشیاء Person در سی شارپ، از کد زیر استفاده کنید:
using System; using System.IO; using System.Collections.Generic; using Newtonsoft.Json; class Program { static void Main() { string json = File.ReadAllText("data.json"); List people = JsonConvert.DeserializeObject<List>(json); foreach (var person in people) { Console.WriteLine($"Name: {person.Name}"); Console.WriteLine($"Age: {person.Age}"); Console.WriteLine($"City: {person.City}"); } } } public class Person { public string Name { get; set; } public int Age { get; set; } public string City { get; set; } }
در این مثال، از لیست List<Person> برای ذخیرهی دادههای JSON استفاده شده است.
Serialize و Deserialize در سی شارپ
در سی شارپ، دو عملیات اصلی برای کار با JSON وجود دارد: سریالسازی (Serialize) و دیسریالسازی (Deserialize). سریالسازی به معنای تبدیل یک شیء به فرمت JSON و دیسریالسازی به معنای تبدیل JSON به یک شیء است.
Serialize در سی شارپ:
برای سریالسازی یک شیء به JSON، از کد زیر استفاده کنید:
using System; using Newtonsoft.Json; class Program { static void Main() { Person person = new Person { Name = "Ali", Age = 30, City = "Tehran" }; string json = JsonConvert.SerializeObject(person); Console.WriteLine(json); } } public class Person { public string Name { get; set; } public int Age { get; set; } public string City { get; set; } }
این کد شیء Person را به فرمت JSON تبدیل میکند.
پیشنهاد مطالعه: آموزش رویدادها در سی شارپ به زبان ساده
Deserialize در سی شارپ
دیسریالسازی، همانطور که در مثالهای قبل دیدید، به معنای تبدیل یک رشتهی JSON به یک شیء سی شارپ است. این عملیات با استفاده از متد JsonConvert.DeserializeObject انجام میشود.
کار با JSON پیچیده در سی شارپ
گاهی اوقات دادههای JSON بهصورت ساختارهای پیچیدهای از اشیاء و آرایهها هستند. برای مثال:
{ "name": "Ali", "age": 30, "address": { "street": "Elm St", "city": "Tehran" }, "phones": ["123-4567", "987-6543"] }
برای کار با چنین دادههایی، میتوانید از کلاسهای تو در تو و لیستها در سی شارپ استفاده کنید:
using System; using Newtonsoft.Json; using System.Collections.Generic; class Program { static void Main() { string json = File.ReadAllText("complex.json"); Person person = JsonConvert.DeserializeObject(json); Console.WriteLine($"Name: {person.Name}"); Console.WriteLine($"Street: {person.Address.Street}"); Console.WriteLine($"City: {person.Address.City}"); Console.WriteLine($"Phone 1: {person.Phones[0]}"); Console.WriteLine($"Phone 2: {person.Phones[1]}"); } } public class Person { public string Name { get; set; } public int Age { get; set; } public Address Address { get; set; } public List Phones { get; set; } } public class Address { public string Street { get; set; } public string City { get; set; } }
در این مثال، از کلاس Address برای نمایش آدرس و از لیست List<string> برای نمایش لیست شمارههای تلفن استفاده شده است.
کار با کالکشنها در سی شارپ و JSON
یکی از قابلیتهای بسیار کاربردی در سی شارپ، استفاده از کالکشنها (Collections) برای مدیریت دادههاست. کالکشنها میتوانند بهراحتی با دادههای JSON ترکیب شوند و به شما اجازه دهند تا دادهها را به صورت ساختاریافتهتر مدیریت کنید.
برای مثال، فرض کنید که یک لیست از اشیاء Person دارید و میخواهید این لیست را به فرمت JSON تبدیل کنید:
using System; using System.Collections.Generic; using Newtonsoft.Json; class Program { static void Main() { List people = new List { new Person { Name = "Ali", Age = 30, City = "Tehran" }, new Person { Name = "Sara", Age = 25, City = "Mashhad" } }; string json = JsonConvert.SerializeObject(people); Console.WriteLine(json); } } public class Person { public string Name { get; set; } public int Age { get; set; } public string City { get; set; } }
این کد لیست people را به فرمت JSON تبدیل میکند.
استفاده از Newtonsoft.Json و مقایسه با Json.NET
کتابخانهی Newtonsoft.Json که به نام Json.NET نیز شناخته میشود، یکی از قدرتمندترین و محبوبترین ابزارها برای کار با JSON در سی شارپ است. این کتابخانه امکانات متنوعی برای سریالسازی، دیسریالسازی، و مدیریت دادههای JSON فراهم میکند.
از مزایای استفاده از Newtonsoft.Json میتوان به سرعت بالا، دقت در سریالسازی و دیسریالسازی، و قابلیتهای پیشرفتهای همچون پشتیبانی از تبدیل دادههای پیچیده و مدیریت خطاها اشاره کرد.
پیشنهاد مطالعه: آموزش توابع API در سی شارپ به زبان ساده
کار با JSON و کالکشنها در پروژههای واقعی
در پروژههای واقعی، معمولاً نیاز است که دادههای JSON را از منابع خارجی مانند APIها دریافت و سپس آنها را در کالکشنهایی مانند لیستها و دیکشنریها ذخیره کنید. این کار به شما امکان میدهد تا دادهها را بهصورت سازمانیافتهتر و کارآمدتر مدیریت کنید.
مدیریت خطاها هنگام کار با JSON در C#
هنگام کار با JSON در سی شارپ، ممکن است با خطاهایی مواجه شوید که ناشی از ناهماهنگی بین ساختار JSON و کلاسی باشد که برای دیسریالسازی استفاده میکنید. برای مدیریت این خطاها، میتوانید از try-catch استفاده کنید:
try { Person person = JsonConvert.DeserializeObject(json); } catch (JsonException ex) { Console.WriteLine("An error occurred: " + ex.Message); }
این کار به شما امکان میدهد تا در صورت بروز خطا، برنامهی شما متوقف نشود و بتوانید اطلاعات لازم را برای رفع مشکل بدست آورید.
مثال عملی: مدیریت یک لیست از محصولات فروشگاه با استفاده از JSON در سی شارپ
فرض کنید یک فروشگاه آنلاین دارید و میخواهید اطلاعات مربوط به محصولات خود را در قالب JSON ذخیره و مدیریت کنید. هر محصول شامل اطلاعاتی مانند نام، قیمت، موجودی، و دستهبندی است. در این مثال، نحوهی سریالسازی و دیسریالسازی لیست محصولات به JSON و بالعکس را بررسی خواهیم کرد.
مرحله 1: تعریف کلاس Product:
ابتدا باید یک کلاس به نام Product تعریف کنیم که نمایانگر هر محصول در فروشگاه است:
public class Product { public string Name { get; set; } public decimal Price { get; set; } public int Stock { get; set; } public string Category { get; set; } }
در این کلاس، چهار ویژگی اصلی برای هر محصول تعریف شده است: Name (نام محصول)، Price (قیمت محصول)، Stock (موجودی محصول)، و Category (دستهبندی محصول).
مرحله 2: ایجاد یک لیست از محصولات
حالا میخواهیم یک لیست از محصولات ایجاد کنیم:
using System; using System.Collections.Generic; public class Program { public static void Main() { List products = new List { new Product { Name = "Laptop", Price = 1200.50m, Stock = 10, Category = "Electronics" }, new Product { Name = "Phone", Price = 850.00m, Stock = 25, Category = "Electronics" }, new Product { Name = "Desk Chair", Price = 150.75m, Stock = 5, Category = "Furniture" } }; } }
در اینجا، سه محصول با اطلاعات مربوطهی آنها ایجاد کردهایم و آنها را در یک لیست products ذخیره کردهایم.
مرحله 3: سریالسازی لیست به JSON:
برای ذخیره یا ارسال این لیست از طریق شبکه، باید آن را به فرمت JSON تبدیل کنیم. از کتابخانهی Newtonsoft.Json برای این کار استفاده میکنیم:
using Newtonsoft.Json; public class Program { public static void Main() { List products = new List { new Product { Name = "Laptop", Price = 1200.50m, Stock = 10, Category = "Electronics" }, new Product { Name = "Phone", Price = 850.00m, Stock = 25, Category = "Electronics" }, new Product { Name = "Desk Chair", Price = 150.75m, Stock = 5, Category = "Furniture" } }; string json = JsonConvert.SerializeObject(products, Formatting.Indented); Console.WriteLine(json); } }
این کد، لیست products را به فرمت JSON تبدیل میکند و خروجی را به صورت رشته نمایش میدهد. پارامتر Formatting.Indented باعث میشود که JSON خروجی بهصورت خوانا و با فرمت مناسب نمایش داده شود.
خروجی سریالسازی:
خروجی این کد بهصورت زیر خواهد بود:
[ { "Name": "Laptop", "Price": 1200.5, "Stock": 10, "Category": "Electronics" }, { "Name": "Phone", "Price": 850.0, "Stock": 25, "Category": "Electronics" }, { "Name": "Desk Chair", "Price": 150.75, "Stock": 5, "Category": "Furniture" } ]
مرحله 4: دیسریالسازی JSON به لیست محصولات:
اکنون فرض کنید این JSON را از یک API یا فایل دریافت کردهاید و میخواهید آن را به لیست محصولات تبدیل کنید. از متد JsonConvert.DeserializeObject استفاده میکنیم:
using System; using System.Collections.Generic; using Newtonsoft.Json; public class Program { public static void Main() { string json = @"[ { 'Name': 'Laptop', 'Price': 1200.5, 'Stock': 10, 'Category': 'Electronics' }, { 'Name': 'Phone', 'Price': 850.0, 'Stock': 25, 'Category': 'Electronics' }, { 'Name': 'Desk Chair', 'Price': 150.75, 'Stock': 5, 'Category': 'Furniture' } ]"; List products = JsonConvert.DeserializeObject<List>(json); foreach (var product in products) { Console.WriteLine($"Name: {product.Name}, Price: {product.Price}, Stock: {product.Stock}, Category: {product.Category}"); } } }
این کد JSON دریافت شده را به لیست Product تبدیل میکند و سپس اطلاعات هر محصول را در کنسول نمایش میدهد.
در این مثال عملی، نحوهی مدیریت یک لیست از محصولات با استفاده از JSON در سی شارپ را آموختید. ابتدا دادهها را به فرمت JSON سریالسازی کردیم و سپس با استفاده از دیسریالسازی این دادهها را به یک لیست از اشیاء تبدیل نمودیم. این تکنیک بهویژه برای تبادل دادهها بین سرویسهای مختلف و ذخیرهسازی دادههای پیچیده بسیار مفید است.
سوالات متداول
توجه به سوالات متداول زیر در رابطه با کار با جیسون در سی شارپ اهمیت زیادی دارد:
- آیا میتوان JSON را بهصورت دستی و بدون استفاده از کتابخانهها در سی شارپ پردازش کرد؟ بله، اما این کار بسیار پیچیدهتر است و استفاده از کتابخانههایی مانند Newtonsoft.Json توصیه میشود.
- آیا کتابخانهی Newtonsoft.Json رایگان است؟ بله، این کتابخانه رایگان است و میتوانید آن را بهراحتی از NuGet نصب کنید.
- JSON چه فرقی با XML دارد؟ JSON ساختار سادهتر و خوانایی بیشتری نسبت به XML دارد و بهسرعت به یکی از فرمتهای استاندارد برای تبادل داده تبدیل شده است.
- آیا میتوان از JSON در برنامههای دسکتاپ استفاده کرد؟ بله، JSON نه تنها در برنامههای تحت وب بلکه در برنامههای دسکتاپ و حتی موبایل نیز قابل استفاده است.
- چطور میتوان دادههای JSON را به یک دیتابیس ذخیره کرد؟ برای این کار ابتدا باید دادههای JSON را به اشیاء سی شارپ تبدیل کنید و سپس با استفاده از تکنولوژیهایی مانند Entity Framework آنها را به دیتابیس ذخیره کنید.
جمعبندی
کار با JSON در سی شارپ یکی از مهارتهای ضروری برای هر توسعهدهندهای است که با دادههای تحت وب کار میکند. با یادگیری نحوهی سریالسازی، دیسریالسازی، و مدیریت دادههای JSON، میتوانید برنامههای پیشرفتهتری ایجاد کنید که قادر به ارتباط با سایر سیستمها و APIها باشند. استفاده از کتابخانهی Newtonsoft.Json نیز به شما امکان میدهد تا بهراحتی و با سرعت بالا دادههای JSON را مدیریت کنید.
اگر به دنبال یادگیری حرفهای برنامهنویسی سی شارپ هستید و میخواهید مهارتهای خود را در این زبان قدرتمند ارتقاء دهید، دورههای آموزش سی شارپ و آموزش برنامه نویسی در مکتبخونه دقیقاً همان چیزی است که نیاز دارید! با شرکت در این دورهها، از پایه تا پیشرفته، تمامی مفاهیم سی شارپ را بهصورت کاملاً کاربردی و پروژهمحور فرا خواهید گرفت.