C#常用类库-详解YamlDotNet在C#开发中数据序列化与反序列化是高频需求广泛应用于配置文件、数据传输、日志存储等场景。YAML作为简洁易读的非标记语言相比XML繁琐、JSON紧凑的特点更适合作为配置文件和高可读性的数据交换格式。而YamlDotNet作为C#生态最主流的YAML处理类库开源免费、功能强大是处理YAML数据的首选工具。本文聚焦实战从核心定位、环境搭建、基础用法到进阶技巧帮你快速掌握YamlDotNet全流程用法。一、YamlDotNet 核心定位与优势YamlDotNet是基于MIT许可证的开源C#类库核心功能是实现.NET对象与YAML格式的双向转换序列化/反序列化底层封装了YAML语法解析器与生成器提供简洁API支持自定义规则适配复杂业务场景。1. 核心优势开源免费可自由用于商业项目源码可定制社区活跃适配.NET全框架.NET Framework 4.5、.NET Core 2.0、.NET 5。功能完整支持基本类型、自定义类、集合、泛型、继承类的序列化/反序列化兼容YAML 1.1和1.2规范。灵活可扩展支持自定义序列化规则、属性映射、忽略指定属性、保留注释适配复杂业务场景。兼容性强跨平台支持Windows、Linux、macOS无第三方依赖集成简单。性能优异解析速度快、内存占用低支持大数据量YAML文档处理满足企业级需求。2. 与其他序列化类库选型对比类库核心优势不足选型建议YamlDotNet专注YAML易用性强、扩展灵活支持注释和复杂类型序列化速度略逊于Newtonsoft.Json不支持JSON配置文件、高可读性数据交换首选Newtonsoft.Json速度快、功能丰富、生态完善专注JSON不支持YAML配置文件可读性差JSON数据传输、接口交互场景System.Xml.Serialization内置无依赖适配传统XML配置语法繁琐、扩展性低不支持YAML旧项目XML配置兼容场景SharpYaml轻量、解析快支持YAML 1.2社区活跃低、高级功能不完善简单YAML解析场景不推荐复杂项目3. 核心应用场景配置文件替代XML、JSON作为appsettings.yaml等配置文件便于人工编辑。数据交换微服务、跨语言项目中作为高可读性的数据交换格式。日志存储将复杂日志对象序列化为YAML便于分析查看。文档生成生成YAML格式接口文档、K8s配置文件等。数据导入导出实现系统数据的备份与恢复。二、环境搭建快速集成YamlDotNetYamlDotNet为第三方类库需通过NuGet安装搭建流程简单适配所有.NET版本。1. 安装方式3种任选方式1NuGet界面安装Visual Studio → 右键项目 → 管理NuGet程序包 → 搜索“YamlDotNet” → 安装最新稳定版。方式2Package Manager Console命令Install-PackageYamlDotNet-Version 13.7.1# 可替换为最新版本方式3手动修改.csproj文件ItemGroupPackageReferenceIncludeYamlDotNetVersion13.7.1//ItemGroup2. 引入命名空间usingYamlDotNet;usingYamlDotNet.Serialization;usingYamlDotNet.Serialization.NamingConventions;3. 环境验证编写简单代码验证序列化与反序列化功能是否正常// 1. 定义测试类publicclassUser{publicstringName{get;set;}publicintAge{get;set;}publicListstringHobbies{get;set;}}// 2. 序列化对象→YAMLvarusernewUser{NameZhangSan,Age25,HobbiesnewListstring{Coding,Reading}};varserializernewSerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();stringyamlserializer.Serialize(user);Console.WriteLine(序列化结果\nyaml);// 3. 反序列化YAML→对象vardeserializernewDeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).IgnoreUnmatchedProperties().Build();UserdeserializedUserdeserializer.DeserializeUser(yaml);Console.WriteLine($反序列化结果Name{deserializedUser.Name}, Age{deserializedUser.Age});运行程序正常输出结果即说明环境搭建成功。三、基础实战核心用法序列化反序列化YamlDotNet的核心的是序列化与反序列化以下覆盖常用场景代码可直接复制使用。1. 通用配置序列化器与反序列化器的常用配置统一配置可提升代码复用性// 序列化器配置varserializernewSerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance)// 驼峰命名.Indent(2)// 缩进2个空格.WithCommentHandling(CommentHandling.IncludeComments)// 保留注释.Build();// 反序列化器配置vardeserializernewDeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).IgnoreUnmatchedProperties()// 忽略未知属性避免报错.AllowNullValues()// 允许空值.Build();2. 基本类型与集合支持string、int、DateTime等基本类型以及List、Dictionary等集合vardatanew{NameLiSi,Age30,BirthDatenewDateTime(1993,10,1),Tagsnewstring[]{C#,YamlDotNet},ScoresnewDictionarystring,int{{Math,90},{English,85}}};// 序列化stringyamlserializer.Serialize(data);// 反序列化dynamic类型无需定义实体类dynamicdeserializeddeserializer.Deserializedynamic(yaml);Console.WriteLine($Math Score:{deserialized.scores.math});3. 自定义类重点支持自定义类、继承类、嵌套类的序列化与反序列化// 嵌套类publicclassAddress{publicstringProvince{get;set;}publicstringCity{get;set;}}// 父类publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}}// 子类publicclassStudent:Person{publicstringStudentId{get;set;}publicAddressAddress{get;set;}publicListstringCourses{get;set;}}// 序列化varstudentnewStudent{NameWangWu,Age20,StudentId2023001,AddressnewAddress{ProvinceGuangdong,CityShenzhen},CoursesnewListstring{C#,Database}};stringstudentYamlserializer.Serialize(student);// 反序列化StudentdeserializedStudentdeserializer.DeserializeStudent(studentYaml);4. 特性用法自定义规则通过特性自定义单个属性的序列化规则灵活适配需求usingYamlDotNet.Serialization.Attributes;publicclassProduct{[YamlAlias(product_id)]// 别名YAML中显示为product_idpublicstringId{get;set;}[YamlIgnore]// 忽略该属性不序列化/反序列化publicstringSecret{get;set;}[YamlComment(产品名称必填)]// 添加注释publicstringName{get;set;}[YamlMember(Order1)]// 指定序列化顺序publicdecimalPrice{get;set;}}四、进阶实战企业级优化技巧基础用法可满足简单场景企业级项目需解决复杂类型、性能、稳定性等问题以下是核心技巧。1. 自定义类型转换器针对DateTime、Enum等复杂类型自定义转换规则以DateTime格式化为例// 实现自定义转换器publicclassCustomDateTimeConverter:IYamlTypeConverter{publicboolAccepts(Typetype)typetypeof(DateTime)||typetypeof(DateTime?);// 反序列化字符串→DateTimepublicobjectReadYaml(IParserparser,Typetype){varvalueparser.ConsumeScalar().Value;returnDateTime.ParseExact(value,yyyy-MM-dd HH:mm:ss,null);}// 序列化DateTime→字符串publicvoidWriteYaml(IEmitteremitter,objectvalue,Typetype){emitter.Emit(newScalar(((DateTime)value).ToString(yyyy-MM-dd HH:mm:ss)));}}// 注册并使用varserializernewSerializerBuilder().WithTypeConverter(newCustomDateTimeConverter()).Build();2. YAML文件读写实战常用封装工具方法实现对象与YAML文件的双向读写/// summary/// 序列化对象到YAML文件/// /summarypublicvoidSerializeToFile(objectobj,stringfilePath){using(varwriternewStreamWriter(filePath,false,Encoding.UTF8)){serializer.Serialize(writer,obj);}}/// summary/// 从YAML文件反序列化到对象/// /summarypublicTDeserializeFromFileT(stringfilePath){if(!File.Exists(filePath))thrownewFileNotFoundException(YAML文件不存在,filePath);using(varreadernewStreamReader(filePath,Encoding.UTF8)){returndeserializer.DeserializeT(reader);}}3. 异常处理与性能优化1异常处理完善异常处理避免程序崩溃提升稳定性publicTDeserializeWithExceptionHandlingT(stringyaml){try{returndeserializer.DeserializeT(yaml);}catch(YamlExceptionex){Console.WriteLine($YAML语法错误{ex.Message}行号{ex.Start.Line});returndefault;}catch(InvalidCastExceptionex){Console.WriteLine($类型转换错误{ex.Message});returndefault;}catch(Exceptionex){Console.WriteLine($反序列化失败{ex.Message});returndefault;}}2性能优化大数据量场景使用Stream读写减少内存占用复用序列化器/反序列化器实例单例模式禁用不必要的功能如注释处理避免使用dynamic类型优先使用具体类型。五、避坑指南与最佳实践1. 常见坑与解决方案坑1YAML语法错误缩进用空格不支持Tab冒号、横杠后必须加空格用在线工具校验语法。坑2命名不一致序列化与反序列化配置相同的命名约定或用[YamlAlias]指定别名。坑3复杂类型格式不符实现自定义类型转换器或使用内置配置。坑4未知属性报错配置IgnoreUnmatchedProperties()忽略未知属性。坑5大数据量性能差用Stream、复用实例、禁用注释处理。2. 最佳实践统一命名约定保持序列化与反序列化配置一致复用序列化器/反序列化器实例提升性能敏感字段用[YamlIgnore]忽略关键属性加注释配置文件场景保留注释便于维护序列化后校验YAML语法避免反序列化失败。六、企业级实战案例配置文件读写工具结合前文知识点实现可直接复用的YAML配置读写工具适配项目全局配置场景。1. 项目结构YamlConfigDemo/ ├─ Config/ │ ├─ AppConfig.cs配置实体 │ └─ YamlConfigHelper.cs工具类 ├─ appsettings.yaml配置文件 └─ Program.cs测试入口2. 核心代码1配置实体类AppConfig.csusingYamlDotNet.Serialization.Attributes;namespaceYamlConfigDemo.Config{publicclassAppConfig{[YamlComment(应用名称必填)]publicstringAppName{get;set;}[YamlComment(应用版本)]publicstringVersion{get;set;}[YamlComment(数据库配置)]publicDatabaseConfigDatabase{get;set;}[YamlComment(服务配置)]publicServiceConfigService{get;set;}}publicclassDatabaseConfig{[YamlAlias(connection_string)]publicstringConnectionString{get;set;}[YamlAlias(timeout)]publicintTimeout{get;set;}30;}publicclassServiceConfig{[YamlAlias(base_url)]publicstringBaseUrl{get;set;}[YamlAlias(timeout)]publicintTimeout{get;set;}5000;}}2配置读写工具类YamlConfigHelper.csusingSystem.IO;usingSystem.Text;usingYamlDotNet.Serialization;usingYamlDotNet.Serialization.NamingConventions;namespaceYamlConfigDemo.Config{publicstaticclassYamlConfigHelper{// 单例复用实例privatestaticreadonlySerializer_serializer;privatestaticreadonlyDeserializer_deserializer;staticYamlConfigHelper(){_serializernewSerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).WithCommentHandling(CommentHandling.IncludeComments).Indent(4).Build();_deserializernewDeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).IgnoreUnmatchedProperties().AllowNullValues().Build();}// 读取配置publicstaticTReadConfigT(stringfilePath){if(!File.Exists(filePath))thrownewFileNotFoundException(配置文件不存在,filePath);using(varreadernewStreamReader(filePath,Encoding.UTF8)){return_deserializer.DeserializeT(reader);}}// 写入配置publicstaticvoidWriteConfig(objectconfig,stringfilePath){using(varwriternewStreamWriter(filePath,false,Encoding.UTF8)){_serializer.Serialize(writer,config);}}}}3测试使用Program.csusingYamlConfigDemo.Config;// 写入配置varconfignewAppConfig{AppNameYamlDotNetDemo,Version1.0.0,DatabasenewDatabaseConfig{ConnectionStringServerlocalhost;DatabaseTest;Uidroot;Pwd123456;},ServicenewServiceConfig{BaseUrlhttps://api.demo.com}};YamlConfigHelper.WriteConfig(config,appsettings.yaml);// 读取配置varreadConfigYamlConfigHelper.ReadConfigAppConfig(appsettings.yaml);Console.WriteLine($应用名称{readConfig.AppName});Console.WriteLine($数据库连接串{readConfig.Database.ConnectionString});总结YamlDotNet是C#处理YAML数据的最优选择其易用性、灵活性和兼容性能完美适配配置文件、数据交换等各类场景。本文从基础到进阶覆盖环境搭建、核心用法、优化技巧和实战案例代码可直接复用。掌握本文内容可轻松解决YAML序列化/反序列化的各类问题提升开发效率。
C#常用类库-详解YamlDotNet
C#常用类库-详解YamlDotNet在C#开发中数据序列化与反序列化是高频需求广泛应用于配置文件、数据传输、日志存储等场景。YAML作为简洁易读的非标记语言相比XML繁琐、JSON紧凑的特点更适合作为配置文件和高可读性的数据交换格式。而YamlDotNet作为C#生态最主流的YAML处理类库开源免费、功能强大是处理YAML数据的首选工具。本文聚焦实战从核心定位、环境搭建、基础用法到进阶技巧帮你快速掌握YamlDotNet全流程用法。一、YamlDotNet 核心定位与优势YamlDotNet是基于MIT许可证的开源C#类库核心功能是实现.NET对象与YAML格式的双向转换序列化/反序列化底层封装了YAML语法解析器与生成器提供简洁API支持自定义规则适配复杂业务场景。1. 核心优势开源免费可自由用于商业项目源码可定制社区活跃适配.NET全框架.NET Framework 4.5、.NET Core 2.0、.NET 5。功能完整支持基本类型、自定义类、集合、泛型、继承类的序列化/反序列化兼容YAML 1.1和1.2规范。灵活可扩展支持自定义序列化规则、属性映射、忽略指定属性、保留注释适配复杂业务场景。兼容性强跨平台支持Windows、Linux、macOS无第三方依赖集成简单。性能优异解析速度快、内存占用低支持大数据量YAML文档处理满足企业级需求。2. 与其他序列化类库选型对比类库核心优势不足选型建议YamlDotNet专注YAML易用性强、扩展灵活支持注释和复杂类型序列化速度略逊于Newtonsoft.Json不支持JSON配置文件、高可读性数据交换首选Newtonsoft.Json速度快、功能丰富、生态完善专注JSON不支持YAML配置文件可读性差JSON数据传输、接口交互场景System.Xml.Serialization内置无依赖适配传统XML配置语法繁琐、扩展性低不支持YAML旧项目XML配置兼容场景SharpYaml轻量、解析快支持YAML 1.2社区活跃低、高级功能不完善简单YAML解析场景不推荐复杂项目3. 核心应用场景配置文件替代XML、JSON作为appsettings.yaml等配置文件便于人工编辑。数据交换微服务、跨语言项目中作为高可读性的数据交换格式。日志存储将复杂日志对象序列化为YAML便于分析查看。文档生成生成YAML格式接口文档、K8s配置文件等。数据导入导出实现系统数据的备份与恢复。二、环境搭建快速集成YamlDotNetYamlDotNet为第三方类库需通过NuGet安装搭建流程简单适配所有.NET版本。1. 安装方式3种任选方式1NuGet界面安装Visual Studio → 右键项目 → 管理NuGet程序包 → 搜索“YamlDotNet” → 安装最新稳定版。方式2Package Manager Console命令Install-PackageYamlDotNet-Version 13.7.1# 可替换为最新版本方式3手动修改.csproj文件ItemGroupPackageReferenceIncludeYamlDotNetVersion13.7.1//ItemGroup2. 引入命名空间usingYamlDotNet;usingYamlDotNet.Serialization;usingYamlDotNet.Serialization.NamingConventions;3. 环境验证编写简单代码验证序列化与反序列化功能是否正常// 1. 定义测试类publicclassUser{publicstringName{get;set;}publicintAge{get;set;}publicListstringHobbies{get;set;}}// 2. 序列化对象→YAMLvarusernewUser{NameZhangSan,Age25,HobbiesnewListstring{Coding,Reading}};varserializernewSerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();stringyamlserializer.Serialize(user);Console.WriteLine(序列化结果\nyaml);// 3. 反序列化YAML→对象vardeserializernewDeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).IgnoreUnmatchedProperties().Build();UserdeserializedUserdeserializer.DeserializeUser(yaml);Console.WriteLine($反序列化结果Name{deserializedUser.Name}, Age{deserializedUser.Age});运行程序正常输出结果即说明环境搭建成功。三、基础实战核心用法序列化反序列化YamlDotNet的核心的是序列化与反序列化以下覆盖常用场景代码可直接复制使用。1. 通用配置序列化器与反序列化器的常用配置统一配置可提升代码复用性// 序列化器配置varserializernewSerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance)// 驼峰命名.Indent(2)// 缩进2个空格.WithCommentHandling(CommentHandling.IncludeComments)// 保留注释.Build();// 反序列化器配置vardeserializernewDeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).IgnoreUnmatchedProperties()// 忽略未知属性避免报错.AllowNullValues()// 允许空值.Build();2. 基本类型与集合支持string、int、DateTime等基本类型以及List、Dictionary等集合vardatanew{NameLiSi,Age30,BirthDatenewDateTime(1993,10,1),Tagsnewstring[]{C#,YamlDotNet},ScoresnewDictionarystring,int{{Math,90},{English,85}}};// 序列化stringyamlserializer.Serialize(data);// 反序列化dynamic类型无需定义实体类dynamicdeserializeddeserializer.Deserializedynamic(yaml);Console.WriteLine($Math Score:{deserialized.scores.math});3. 自定义类重点支持自定义类、继承类、嵌套类的序列化与反序列化// 嵌套类publicclassAddress{publicstringProvince{get;set;}publicstringCity{get;set;}}// 父类publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}}// 子类publicclassStudent:Person{publicstringStudentId{get;set;}publicAddressAddress{get;set;}publicListstringCourses{get;set;}}// 序列化varstudentnewStudent{NameWangWu,Age20,StudentId2023001,AddressnewAddress{ProvinceGuangdong,CityShenzhen},CoursesnewListstring{C#,Database}};stringstudentYamlserializer.Serialize(student);// 反序列化StudentdeserializedStudentdeserializer.DeserializeStudent(studentYaml);4. 特性用法自定义规则通过特性自定义单个属性的序列化规则灵活适配需求usingYamlDotNet.Serialization.Attributes;publicclassProduct{[YamlAlias(product_id)]// 别名YAML中显示为product_idpublicstringId{get;set;}[YamlIgnore]// 忽略该属性不序列化/反序列化publicstringSecret{get;set;}[YamlComment(产品名称必填)]// 添加注释publicstringName{get;set;}[YamlMember(Order1)]// 指定序列化顺序publicdecimalPrice{get;set;}}四、进阶实战企业级优化技巧基础用法可满足简单场景企业级项目需解决复杂类型、性能、稳定性等问题以下是核心技巧。1. 自定义类型转换器针对DateTime、Enum等复杂类型自定义转换规则以DateTime格式化为例// 实现自定义转换器publicclassCustomDateTimeConverter:IYamlTypeConverter{publicboolAccepts(Typetype)typetypeof(DateTime)||typetypeof(DateTime?);// 反序列化字符串→DateTimepublicobjectReadYaml(IParserparser,Typetype){varvalueparser.ConsumeScalar().Value;returnDateTime.ParseExact(value,yyyy-MM-dd HH:mm:ss,null);}// 序列化DateTime→字符串publicvoidWriteYaml(IEmitteremitter,objectvalue,Typetype){emitter.Emit(newScalar(((DateTime)value).ToString(yyyy-MM-dd HH:mm:ss)));}}// 注册并使用varserializernewSerializerBuilder().WithTypeConverter(newCustomDateTimeConverter()).Build();2. YAML文件读写实战常用封装工具方法实现对象与YAML文件的双向读写/// summary/// 序列化对象到YAML文件/// /summarypublicvoidSerializeToFile(objectobj,stringfilePath){using(varwriternewStreamWriter(filePath,false,Encoding.UTF8)){serializer.Serialize(writer,obj);}}/// summary/// 从YAML文件反序列化到对象/// /summarypublicTDeserializeFromFileT(stringfilePath){if(!File.Exists(filePath))thrownewFileNotFoundException(YAML文件不存在,filePath);using(varreadernewStreamReader(filePath,Encoding.UTF8)){returndeserializer.DeserializeT(reader);}}3. 异常处理与性能优化1异常处理完善异常处理避免程序崩溃提升稳定性publicTDeserializeWithExceptionHandlingT(stringyaml){try{returndeserializer.DeserializeT(yaml);}catch(YamlExceptionex){Console.WriteLine($YAML语法错误{ex.Message}行号{ex.Start.Line});returndefault;}catch(InvalidCastExceptionex){Console.WriteLine($类型转换错误{ex.Message});returndefault;}catch(Exceptionex){Console.WriteLine($反序列化失败{ex.Message});returndefault;}}2性能优化大数据量场景使用Stream读写减少内存占用复用序列化器/反序列化器实例单例模式禁用不必要的功能如注释处理避免使用dynamic类型优先使用具体类型。五、避坑指南与最佳实践1. 常见坑与解决方案坑1YAML语法错误缩进用空格不支持Tab冒号、横杠后必须加空格用在线工具校验语法。坑2命名不一致序列化与反序列化配置相同的命名约定或用[YamlAlias]指定别名。坑3复杂类型格式不符实现自定义类型转换器或使用内置配置。坑4未知属性报错配置IgnoreUnmatchedProperties()忽略未知属性。坑5大数据量性能差用Stream、复用实例、禁用注释处理。2. 最佳实践统一命名约定保持序列化与反序列化配置一致复用序列化器/反序列化器实例提升性能敏感字段用[YamlIgnore]忽略关键属性加注释配置文件场景保留注释便于维护序列化后校验YAML语法避免反序列化失败。六、企业级实战案例配置文件读写工具结合前文知识点实现可直接复用的YAML配置读写工具适配项目全局配置场景。1. 项目结构YamlConfigDemo/ ├─ Config/ │ ├─ AppConfig.cs配置实体 │ └─ YamlConfigHelper.cs工具类 ├─ appsettings.yaml配置文件 └─ Program.cs测试入口2. 核心代码1配置实体类AppConfig.csusingYamlDotNet.Serialization.Attributes;namespaceYamlConfigDemo.Config{publicclassAppConfig{[YamlComment(应用名称必填)]publicstringAppName{get;set;}[YamlComment(应用版本)]publicstringVersion{get;set;}[YamlComment(数据库配置)]publicDatabaseConfigDatabase{get;set;}[YamlComment(服务配置)]publicServiceConfigService{get;set;}}publicclassDatabaseConfig{[YamlAlias(connection_string)]publicstringConnectionString{get;set;}[YamlAlias(timeout)]publicintTimeout{get;set;}30;}publicclassServiceConfig{[YamlAlias(base_url)]publicstringBaseUrl{get;set;}[YamlAlias(timeout)]publicintTimeout{get;set;}5000;}}2配置读写工具类YamlConfigHelper.csusingSystem.IO;usingSystem.Text;usingYamlDotNet.Serialization;usingYamlDotNet.Serialization.NamingConventions;namespaceYamlConfigDemo.Config{publicstaticclassYamlConfigHelper{// 单例复用实例privatestaticreadonlySerializer_serializer;privatestaticreadonlyDeserializer_deserializer;staticYamlConfigHelper(){_serializernewSerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).WithCommentHandling(CommentHandling.IncludeComments).Indent(4).Build();_deserializernewDeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).IgnoreUnmatchedProperties().AllowNullValues().Build();}// 读取配置publicstaticTReadConfigT(stringfilePath){if(!File.Exists(filePath))thrownewFileNotFoundException(配置文件不存在,filePath);using(varreadernewStreamReader(filePath,Encoding.UTF8)){return_deserializer.DeserializeT(reader);}}// 写入配置publicstaticvoidWriteConfig(objectconfig,stringfilePath){using(varwriternewStreamWriter(filePath,false,Encoding.UTF8)){_serializer.Serialize(writer,config);}}}}3测试使用Program.csusingYamlConfigDemo.Config;// 写入配置varconfignewAppConfig{AppNameYamlDotNetDemo,Version1.0.0,DatabasenewDatabaseConfig{ConnectionStringServerlocalhost;DatabaseTest;Uidroot;Pwd123456;},ServicenewServiceConfig{BaseUrlhttps://api.demo.com}};YamlConfigHelper.WriteConfig(config,appsettings.yaml);// 读取配置varreadConfigYamlConfigHelper.ReadConfigAppConfig(appsettings.yaml);Console.WriteLine($应用名称{readConfig.AppName});Console.WriteLine($数据库连接串{readConfig.Database.ConnectionString});总结YamlDotNet是C#处理YAML数据的最优选择其易用性、灵活性和兼容性能完美适配配置文件、数据交换等各类场景。本文从基础到进阶覆盖环境搭建、核心用法、优化技巧和实战案例代码可直接复用。掌握本文内容可轻松解决YAML序列化/反序列化的各类问题提升开发效率。