C# (.NET) में ऑब्जेक्ट सीरियलाइज़ेशन: JSON, XML और Binary

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# (.NET) में ऑब्जेक्ट सीरियलाइज़ेशन: JSON, XML और Binary

सीरियलाइज़ेशन एक जटिल ऑब्जेक्ट (या ऑब्जेक्ट ग्राफ) को बाइट स्ट्रीम या टेक्स्ट फॉर्मेट (JSON, XML) में बदलने की प्रक्रिया है। यह ऑब्जेक्ट की स्थिति को फ़ाइल में सेव करने, नेटवर्क (REST API, gRPC) पर डेटा ट्रांसफर करने या कैशिंग के लिए आवश्यक है। उल्टी प्रक्रिया — डीसीरियलाइज़ेशन — सीरियलाइज़्ड रूप से ऑब्जेक्ट को पुनर्स्थापित करती है। .NET इकोसिस्टम (.NET Core और .NET 5/6/7/8 सहित) में सीरियलाइज़ेशन के कई बिल्ट-इन मैकेनिज़्म मौजूद हैं।

1. System.Text.Json — JSON में आधुनिक सीरियलाइज़ेशन

.NET Core 3.0 से, Microsoft System.Text.Json को JSON के साथ काम करने का मुख्य तरीका बताता है। यह लाइब्रेरी हल्की, हाई-परफॉरमेंस वाली है और इसे किसी थर्ड-पार्टी डिपेंडेंसी (Newtonsoft.Json के विपरीत) की ज़रूरत नहीं है।

बेसिक सीरियलाइज़ेशन और डीसीरियलाइज़ेशन का उदाहरण

using System;
using System.Text.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<string> Hobbies { get; set; }
}

class Program
{
    static void Main()
    {
        var person = new Person
        {
            Name = "राहुल",
            Age = 30,
            Hobbies = new List<string> { "पढ़ना", "प्रोग्रामिंग" }
        };

        // सीरियलाइज़ेशन
        string json = JsonSerializer.Serialize(person);
        Console.WriteLine(json);
        // {"Name":"राहुल","Age":30,"Hobbies":["पढ़ना","प्रोग्रामिंग"]}

        // डीसीरियलाइज़ेशन
        Person restored = JsonSerializer.Deserialize<Person>(json);
        Console.WriteLine(restored.Name); // राहुल
    }
}

अट्रीब्यूट के साथ सीरियलाइज़ेशन कॉन्फ़िगर करना

आप JSON में प्रॉपर्टी के नामों को नियंत्रित कर सकते हैं, null-वैल्यू को इग्नोर कर सकते हैं या कस्टम कन्वर्टर का उपयोग कर सकते हैं:

using System.Text.Json.Serialization;

public class Product
{
    [JsonPropertyName("product_id")]
    public int Id { get; set; }

    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public string? Description { get; set; }

    [JsonConverter(typeof(JsonStringEnumConverter))]
    public Status Status { get; set; }
}

public enum Status { Active, Inactive }

2. XmlSerializer — XML में सीरियलाइज़ेशन

XmlSerializer क्लास (नेमस्पेस System.Xml.Serialization) .NET के सभी वर्ज़न में उपलब्ध है और पुराने सिस्टम या कॉन्फ़िगरेशन XML फ़ाइलों के साथ संगतता के लिए आदर्श है।

XmlSerializer के साथ काम करने का उदाहरण

using System;
using System.IO;
using System.Xml.Serialization;

[XmlRoot("Employee")]
public class Employee
{
    [XmlElement("FullName")]
    public string Name { get; set; }

    [XmlAttribute("id")]
    public int Id { get; set; }

    [XmlArray("Projects")]
    [XmlArrayItem("Project")]
    public List<string> Projects { get; set; }
}

class Program
{
    static void Main()
    {
        var emp = new Employee
        {
            Id = 101,
            Name = "प्रिया शर्मा",
            Projects = new List<string> { "Alpha", "Beta" }
        };

        var serializer = new XmlSerializer(typeof(Employee));
        using (var writer = new StreamWriter("employee.xml"))
        {
            serializer.Serialize(writer, emp);
        }

        // डीसीरियलाइज़ेशन
        using (var reader = new StreamReader("employee.xml"))
        {
            Employee restored = (Employee)serializer.Deserialize(reader);
            Console.WriteLine(restored.Name); // प्रिया शर्मा
        }
    }
}

महत्वपूर्ण: XmlSerializer के लिए ज़रूरी है कि क्लास में पब्लिक पैरामीटर रहित कंस्ट्रक्टर हो, और सीरियलाइज़ की जाने वाली प्रॉपर्टीज़ पब्लिक हों और उनमें सेटर हों।

3. BinaryFormatter (पुराना, लेकिन लीगेसी के लिए उल्लेखित)

पहले System.Runtime.Serialization.Formatters.Binary.BinaryFormatter का उपयोग बाइनरी सीरियलाइज़ेशन के लिए किया जाता था। हालांकि, सुरक्षा समस्याओं (कमजोरियों) के कारण इसे .NET 5 में डेप्रिकेटेड घोषित कर दिया गया था और .NET 8 में इसे हटा दिया गया है। Microsoft अब इसके बजाय System.Text.Json या Protobuf जैसे थर्ड-पार्टी समाधानों का उपयोग करने की सलाह देता है।

अनुशंसाएँ