JSON থেকে C# রূপান্তর হলো JSON ডেটা থেকে strongly-typed C# ক্লাস সংজ্ঞা তৈরি করার প্রক্রিয়া। যখন একটি .NET অ্যাপ্লিকেশন কোনো API, কনফিগারেশন ফাইল বা মেসেজ কিউ থেকে JSON গ্রহণ করে, তখন সেই ডেটা অবজেক্টে ডিসিরিয়ালাইজ করতে C# ক্লাসের প্রয়োজন হয়। বিশেষত JSON-এ নেস্টেড অবজেক্ট, অ্যারে ও মিশ্র টাইপ থাকলে এই ক্লাসগুলো হাতে লেখা ক্লান্তিকর ও ত্রুটিপ্রবণ।
একটি JSON থেকে C# ক্লাস জেনারেটর আপনার JSON-এর কাঠামো ও মান পরীক্ষা করে, প্রতিটি ফিল্ডের জন্য উপযুক্ত C# টাইপ নির্ধারণ করে এবং প্রপার্টি অ্যাক্সেসর ও সিরিয়ালাইজেশন অ্যাট্রিবিউটসহ ক্লাস সংজ্ঞা তৈরি করে। আউটপুট .NET নামকরণ রীতি অনুসরণ করে: PascalCase প্রপার্টির নাম, মূল camelCase বা snake_case JSON কী-তে ম্যাপ করতে JsonPropertyName অ্যাট্রিবিউট, এবং অ্যারের জন্য List'<'T'>' এর সঠিক ব্যবহার।
এই রূপান্তর ASP.NET Core ওয়েব API, Azure Functions এবং বাহ্যিক JSON ডেটা ব্যবহারকারী যেকোনো .NET সার্ভিসে বিশেষভাবে প্রচলিত। dynamic বা Dictionary'<'string, object'>' ব্যবহারের পরিবর্তে, টাইপড ক্লাস আপনাকে কম্পাইল-সময় নিরাপত্তা, IntelliSense সমর্থন এবং ফিল্ড নামের টাইপো থেকে সুরক্ষা দেয় যা অন্যথায় শুধু রানটাইমে ধরা পড়ত। আপনার JSON এই টুলে পেস্ট করুন এবং তাৎক্ষণিকভাবে ব্যবহারযোগ্য C# ক্লাস পান।
JSON থেকে C# জেনারেটর কেন ব্যবহার করবেন?
JSON স্যাম্পল থেকে C# মডেল ক্লাস হাতে লেখা সময়সাপেক্ষ এবং মানবিক ভুলের সুযোগ তৈরি করে। একটি জেনারেটর পুনরাবৃত্তিমূলক অংশগুলো সামলায়, যাতে আপনি ব্যবসায়িক লজিকে মনোযোগ দিতে পারেন।
⚡
তাৎক্ষণিক ক্লাস জেনারেশন
আপনার JSON পেস্ট করুন এবং এক সেকেন্ডের কম সময়ে সম্পূর্ণ C# ক্লাস পান। কোনো প্রপার্টি হাতে টাইপ করতে হবে না, কোনো ফিল্ড ভুলে যাওয়ার সুযোগ নেই।
🔒
গোপনীয়তা সুরক্ষিত
সমস্ত রূপান্তর আপনার ব্রাউজারে চলে। আপনার JSON ডেটা কখনো আপনার মেশিন ছাড়ে না, তাই API কী, টোকেন ও ব্যক্তিগত তথ্য সুরক্ষিত থাকে।
📋
সঠিক অ্যাট্রিবিউট ম্যাপিং
জেনারেটেড ক্লাসে JsonPropertyName অ্যাট্রিবিউট থাকে যা PascalCase C# প্রপার্টিকে মূল JSON কী নামে ম্যাপ করে, ডিসিরিয়ালাইজেশনে অমিল রোধ করে।
🌐
কোনো অ্যাকাউন্ট বা ইনস্টলেশন নেই
পেজ খুলুন এবং JSON পেস্ট করুন। ইনস্টল করার জন্য কোনো NuGet প্যাকেজ নেই, কনফিগার করার জন্য কোনো Visual Studio এক্সটেনশন নেই, কোনো সাইনআপ ফর্ম নেই।
JSON থেকে C# ব্যবহারের ক্ষেত্র
ব্যাকএন্ড API সংযোজন
তৃতীয়-পক্ষের REST API-এর জন্য রিকোয়েস্ট ও রেসপন্স মডেল তৈরি করুন। API ডকুমেন্টেশন থেকে স্যাম্পল JSON পেস্ট করুন এবং HttpClient কলের জন্য ব্যবহারযোগ্য C# ক্লাস পান।
ASP.NET Core Controllers
অ্যাকশন মেথড প্যারামিটারের জন্য মডেল ক্লাস তৈরি করুন। যখন আপনার এন্ডপয়েন্ট JSON বডি গ্রহণ করে, জেনারেটেড ক্লাস আপনাকে স্বয়ংক্রিয় মডেল বাইন্ডিং ও ভ্যালিডেশন দেয়।
Azure Functions ও Serverless
Azure Functions-এর জন্য ইনপুট ও আউটপুট বাইন্ডিং তৈরি করুন যা কিউ, ইভেন্ট হাব বা HTTP ট্রিগার থেকে JSON মেসেজ প্রক্রিয়া করে।
কনফিগারেশন ডিসিরিয়ালাইজেশন
appsettings.json সেকশন বা বাহ্যিক কনফিগ ফাইল ডিপেন্ডেন্সি ইনজেকশনে IOptions'<'T'>' এর সাথে ব্যবহারের জন্য টাইপড C# অপশন ক্লাসে রূপান্তর করুন।
ডেটাবেস সিডিং ও মাইগ্রেশন
Entity Framework সিড ডেটা, ইন্টিগ্রেশন টেস্ট সেটআপ বা ডেটা মাইগ্রেশন স্ক্রিপ্টের জন্য JSON ফিক্সচার ফাইল C# অবজেক্টে রূপান্তর করুন।
C# টাইপ সিস্টেম শেখা
.NET-এ নতুন শিক্ষার্থী ও ডেভেলপাররা দেখতে পারেন কীভাবে JSON টাইপ C# টাইপে ম্যাপ হয়, প্রপার্টি অ্যাক্সেসর বুঝতে এবং উদাহরণের মাধ্যমে সিরিয়ালাইজেশন অ্যাট্রিবিউট সম্পর্কে জানতে পারেন।
JSON থেকে C# টাইপ ম্যাপিং রেফারেন্স
প্রতিটি JSON মানের টাইপ একটি নির্দিষ্ট C# টাইপে ম্যাপ হয়। জেনারেটর সর্বাধিক নির্ভুল টাইপ বেছে নিতে প্রকৃত মান বিশ্লেষণ করে। উদাহরণস্বরূপ, দশমিক বিন্দু ছাড়া একটি JSON সংখ্যা int হয়, আর 3.14 হয় double। Null মান object? (nullable রেফারেন্স টাইপ) তৈরি করে কারণ শুধু null থেকে প্রকৃত টাইপ নির্ধারণ করা সম্ভব নয়।
JSON টাইপ
উদাহরণ
C# টাইপ
string
"hello"
string
number (int)
42
int
number (float)
3.14
double
boolean
true, false
bool
null
null
object?
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 থেকে অন্তর্নির্মিত। Newtonsoft-এর চেয়ে দ্রুত ও কম মেমোরি ব্যবহার করে। প্রপার্টি ম্যাপিংয়ের জন্য [JsonPropertyName] ব্যবহার করে। নতুন .NET 6+ প্রজেক্টের জন্য ডিফল্ট পছন্দ। JsonPath বা রেফারেন্স হ্যান্ডলিংয়ের মতো সব Newtonsoft ফিচার সরাসরি সমর্থন করে না।
Newtonsoft.Json
মূল .NET JSON লাইব্রেরি (Json.NET)। প্রপার্টি ম্যাপিংয়ের জন্য [JsonProperty] ব্যবহার করে। আরও উন্নত পরিস্থিতি সমর্থন করে: polymorphic সিরিয়ালাইজেশন, JsonPath কোয়েরি, আরও নমনীয় কাস্টম কনভার্টার। পুরনো কোডবেস ও System.Text.Json-এর না থাকা ফিচার প্রয়োজনে এখনো প্রচলিত।
কোড উদাহরণ
এই উদাহরণগুলো দেখায় কীভাবে JSON থেকে জেনারেটেড C# ক্লাস সংজ্ঞায়িত ও ব্যবহার করতে হয়, উভয় প্রধান সিরিয়ালাইজেশন লাইব্রেরি ব্যবহার করে, এবং কমান্ড লাইন থেকে জেনারেশন স্বয়ংক্রিয় করার উপায়।
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; }
// }
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 অ্যারের ক্ষেত্রে কী হয়?
জেনারেটর প্রথম non-null উপাদান থেকে অ্যারে উপাদানের টাইপ নির্ধারণ করে। অ্যারেতে মিশ্র টাইপ (string ও সংখ্যা একসাথে) থাকলে জেনারেটেড টাইপ List'<'object'>' হয়ে যায়। বাস্তবে সুগঠিত API রেসপন্স একটি অ্যারেতে বিরল ক্ষেত্রে মিশ্র টাইপ রাখে।
জেনারেটেড ক্লাস Entity Framework-এর সাথে ব্যবহার করা যাবে?
হ্যাঁ, তবে [Key], [Required], বা [Column] অ্যাট্রিবিউটের মতো EF-নির্দিষ্ট অ্যানোটেশন যোগ করতে হবে। জেনারেটেড ক্লাস আপনাকে প্রপার্টির কাঠামো দেয়; এগুলোকে একটি scaffold হিসেবে ধরুন এবং উপরে EF কনফিগারেশন যোগ করুন। EF একটি প্যারামিটারহীন constructor-ও প্রত্যাশা করে, যা জেনারেটেড ক্লাসে ডিফল্টভাবে থাকে।
JSON-এর null মান C#-এ কীভাবে রূপান্তরিত হয়?
একটি JSON null মান object? টাইপ তৈরি করে কারণ শুধু null থেকে উদ্দিষ্ট টাইপ নির্ধারণ করা সম্ভব নয়। জেনারেশনের পরে আপনার API স্কিমার জ্ঞান অনুযায়ী object? কে সঠিক nullable টাইপ (string?, int?, বা একটি নির্দিষ্ট ক্লাস?) দিয়ে প্রতিস্থাপন করা উচিত।
camelCase JSON কি স্বয়ংক্রিয়ভাবে PascalCase C# প্রপার্টিতে ম্যাপ হয়?
হ্যাঁ। জেনারেটর "firstName" এর মতো JSON কী PascalCase প্রপার্টি FirstName-এ রূপান্তর করে এবং একটি [JsonPropertyName("firstName")] অ্যাট্রিবিউট যোগ করে। এটি নিশ্চিত করে যে সিরিয়ালাইজার সিরিয়ালাইজেশন ও ডিসিরিয়ালাইজেশনের সময় দুটি নামকরণ রীতির মধ্যে স্বয়ংক্রিয়ভাবে ম্যাপ করে।
C#-এ অপশনাল ফিল্ড সহ JSON কীভাবে সামলাবেন?
প্রপার্টির টাইপ nullable করুন (যেমন string? বা int?) এবং একটি ডিফল্ট মান নির্ধারণ করুন। System.Text.Json-এর সাথে সিরিয়ালাইজেশনের সময় null মান এড়িয়ে যেতে JsonSerializerOptions.DefaultIgnoreCondition কনফিগার করতে পারেন। জেনারেটর ডিফল্টভাবে non-nullable টাইপ তৈরি করে, তাই আপনার API চুক্তি অনুযায়ী nullability পর্যালোচনা ও সামঞ্জস্য করুন।