C# (.NET) में YAML के साथ कार्य: लाइब्रेरीज़ और व्यावहारिक उदाहरण
YAML (YAML Ain't Markup Language) डेटा सीरियलाइज़ेशन का एक लोकप्रिय प्रारूप है, जिसका व्यापक रूप से कॉन्फ़िगरेशन फ़ाइलों, DevOps (Ansible, Kubernetes, Docker Compose) और डेटा आदान-प्रदान के लिए उपयोग किया जाता है। .NET इकोसिस्टम में YAML के लिए कोई अंतर्निहित समर्थन नहीं है, हालांकि शक्तिशाली तृतीय-पक्ष लाइब्रेरीज़ मौजूद हैं। इस लेख में हम दो मुख्य लाइब्रेरीज़ पर विचार करेंगे: YamlDotNet (सबसे लोकप्रिय) और SharpYaml (एक हल्का विकल्प), और दिखाएंगे कि उन्हें C# प्रोजेक्ट्स में कैसे एकीकृत किया जाए।
1. JSON/XML के बजाय YAML क्यों चुनें?
- इंडेंटेशन के साथ मानव-पठनीय सिंटैक्स (कोष्ठक और उद्धरण चिह्नों के बिना)।
- टिप्पणियों के लिए समर्थन (# से शुरू होती हैं)।
- जटिल संरचनाओं (सूचियाँ, शब्दकोश, बहु-पंक्ति स्ट्रिंग्स) के लिए अंतर्निहित समर्थन।
- कंटेनरीकरण और CI/CD में कॉन्फ़िगरेशन के लिए डी-फैक्टो मानक।
2. मुख्य लाइब्रेरी: YamlDotNet
YamlDotNet .NET (जिसमें .NET Core, .NET 5+ शामिल है) के लिए सबसे परिपक्व और समर्थित लाइब्रेरी है। यह पूरा चक्र प्रदान करती है: डीसीरियलाइज़ेशन (YAML → C# ऑब्जेक्ट) और सीरियलाइज़ेशन (ऑब्जेक्ट → YAML)।
2.1 NuGet के माध्यम से स्थापना
dotnet add package YamlDotNetया Visual Studio पैकेज मैनेजर के माध्यम से: Install-Package YamlDotNet।
2.2 बुनियादी डीसीरियलाइज़ेशन
मान लीजिए, हमारे पास एक फ़ाइल config.yaml है:
# एप्लिकेशन सेटिंग्सapp: name: MyApp version: 1.0.0 debug: false
database: host: localhost port: 5432 credentials: user: admin password: secretआइए संबंधित C# क्लासेज़ बनाएँ:
public class AppConfig{ public string Name { get; set; } public string Version { get; set; } public bool Debug { get; set; }}
public class DatabaseConfig{ public string Host { get; set; } public int Port { get; set; } public Credentials Credentials { get; set; }}
public class Credentials{ public string User { get; set; } public string Password { get; set; }}
public class RootConfig{ public AppConfig App { get; set; } public DatabaseConfig Database { get; set; }}अब YAML को ऑब्जेक्ट्स में पार्स करें:
using YamlDotNet.Serialization;using YamlDotNet.Serialization.NamingConventions;
var yamlContent = File.ReadAllText("config.yaml");
var deserializer = new DeserializerBuilder() .WithNamingConvention(UnderscoredNamingConvention.Instance) // अंडरस्कोर के लिए .Build();
var config = deserializer.Deserialize<RootConfig>(yamlContent);
Console.WriteLine($"App: {config.App.Name} v{config.App.Version}");Console.WriteLine($"DB host: {config.Database.Host}:{config.Database.Port}");2.3 ऑब्जेक्ट्स का YAML में सीरियलाइज़ेशन
var serializer = new SerializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) .Build();
var config = new RootConfig{ App = new AppConfig { Name = "TestApp", Version = "2.0.0", Debug = true }, Database = new DatabaseConfig { Host = "192.168.1.1", Port = 3306, Credentials = new Credentials { User = "root", Password = "qwerty" } }};
string yamlOutput = serializer.Serialize(config);Console.WriteLine(yamlOutput);2.4 डायनामिक डेटा के साथ कार्य
यदि YAML संरचना पहले से ज्ञात नहीं है, तो Dictionary<object, object> का उपयोग करें:
var deserializer = new DeserializerBuilder() .Build();
var result = deserializer.Deserialize<Dictionary<object, object>>(yamlContent);// शब्दकोश का पुनरावर्ती ट्रैवर्सलPrintYaml(result, 0);
void PrintYaml(Dictionary<object, object> dict, int indent){ foreach (var kvp in dict) { Console.WriteLine($"{new string(' ', indent * 2)}{kvp.Key}: {kvp.Value}");