العمل مع YAML في C# (.NET): مكتبة YamlDotNet

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع YAML في C# (.NET): مكتبة YamlDotNet

\n\n

YAML (YAML Ain't Markup Language) هو تنسيق مناسب لتسلسل البيانات، يُستخدم غالبًا لملفات التكوين، وصف خطوط أنابيب CI/CD، Docker Compose وملفات Kubernetes. في نظام .NET البيئي، المكتبة الرئيسية للعمل مع YAML هي YamlDotNet — أداة قوية، عالية الأداء ومتوافقة تمامًا مع مواصفات YAML 1.1 و 1.2.

\n\n

في هذه المقالة سنشرح: كيفية تثبيت YamlDotNet، إجراء التسلسل الأساسي وإلغاء التسلسل لكائنات C#، إعداد العلامات المخصصة ومعالجة هياكل البيانات المعقدة.

\n\n

تثبيت YamlDotNet

\n\n

المكتبة متاحة عبر NuGet. قم بتنفيذ الأمر في وحدة تحكم مدير الحزم:

\n\n
dotnet add package YamlDotNet
\n\n

أو عبر Package Manager Console:

\n\n
Install-Package YamlDotNet
\n\n

الاستخدام الأساسي: إلغاء تسلسل YAML إلى كائن C#

\n\n

لنفترض أن لدينا ملف YAML config.yaml يحتوي على إعدادات التطبيق:

\n\n
app:\n  name: MyApp\n  version: 2.0.1\n  debug: true\ndatabase:\n  host: localhost\n  port: 5432\n  credentials:\n    user: admin\n    password: secret
\n\n

لننشئ الفئات المقابلة في C#:

\n\n
public class AppConfig\n{\n    public string Name { get; set; }\n    public string Version { get; set; }\n    public bool Debug { get; set; }\n}\n\npublic class DatabaseConfig\n{\n    public string Host { get; set; }\n    public int Port { get; set; }\n    public CredentialsConfig Credentials { get; set; }\n}\n\npublic class CredentialsConfig\n{\n    public string User { get; set; }\n    public string Password { get; set; }\n}\n\npublic class RootConfig\n{\n    public AppConfig App { get; set; }\n    public DatabaseConfig Database { get; set; }\n}
\n\n

الآن لنقم بإلغاء تسلسل YAML إلى كائن:

\n\n
using YamlDotNet.Serialization;\nusing YamlDotNet.Serialization.NamingConventions;\n\nvar yamlContent = File.ReadAllText("config.yaml");\n\nvar deserializer = new DeserializerBuilder()\n    .WithNamingConvention(UnderscoredNamingConvention.Instance) // لـ snake_case\n    .Build();\n\nvar config = deserializer.Deserialize<RootConfig>(yamlContent);\n\nConsole.WriteLine(config.App.Name);        // MyApp\nConsole.WriteLine(config.Database.Port);   // 5432
\n\n

تسلسل كائنات C# إلى YAML

\n\n

المهمة العكسية — تحويل كائن C# إلى سلسلة YAML:

\n\n
var config = new RootConfig\n{\n    App = new AppConfig { Name = "MyApp", Version = "2.0.1", Debug = true },\n    Database = new DatabaseConfig\n    {\n        Host = "localhost",\n        Port = 5432,\n        Credentials = new CredentialsConfig { User = "admin", Password = "secret" }\n    }\n};\n\nvar serializer = new SerializerBuilder()\n    .WithNamingConvention(CamelCaseNamingConvention.Instance) // camelCase في YAML\n    .Build();\n\nvar yaml = serializer.Serialize(config);\nConsole.WriteLine(yaml);
\n\n

النتيجة:

\n\n
app:\n  name: MyApp\n  version: 2.0.1\n  debug: true\ndatabase:\n  host: localhost\n  port: 5432\n  credentials:\n    user: admin\n    password: secret
\n\n

العمل مع المجموعات والأنواع المعقدة

\n\n

يدعم YamlDotNet بشكل ممتاز القوائم، القواميس والهياكل المتداخلة. مثال مع قائمة:

\n\n
public class Project\n{\n    public string Name { get; set; }\n    public List<string> Tags { get; set; }\n}\n\n// YAML:\n// name: MyProject\n// tags:\n//   - dotnet\n//   - yaml\n//   - csharp\n\nvar yaml = @"\nname: MyProject\ntags:\n  - dotnet\n  - yaml\n  - csharp\n";\n\nvar deserializer = new DeserializerBuilder().Build();\nvar project = deserializer.Deserialize<Project>(yaml);\n\nforeach (var tag in project.Tags)\n    Console.WriteLine(tag);
\n\n

العلامات والأنواع المخصصة (TagMapping)

\n\n

أحيانًا تحتوي ملفات YAML على ع

توصيات