You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找可保留非语义格式的YAML DOM解析与序列化开源库

满足需求的C# YAML开源库推荐

1. YamlDotNet(启用格式保留模式)

YamlDotNet是C#生态中应用广泛的YAML库,默认序列化会丢失格式细节,但通过DOM模型结合格式保留配置,可实现完整的非语义信息留存:

  • 解析时用YamlStream.Load()加载完整文档,保留注释、空白行、节点顺序、多行字符串样式等所有格式元数据
  • 基于MappingNode/ScalarNode等DOM节点结构修改配置内容
  • 序列化时通过Save()方法的参数禁用自动格式化,严格复现原文件格式
  • 原生支持YAML v1.2,兼容JSON子结构解析

核心代码片段:

// 加载原配置,保留所有格式信息
var yamlStream = new YamlStream();
using var reader = new StreamReader("config.yaml");
yamlStream.Load(reader);

// 操作DOM节点修改配置
var root = (MappingNode)yamlStream.Documents[0].RootNode;
root["new_config_item"] = new ScalarNode("custom_value");

// 保存时保留原格式
using var writer = new StreamWriter("config.yaml");
yamlStream.Save(writer, false); // false参数禁用自动格式化

2. NetYAML

NetYAML是专为格式保留设计的轻量YAML库,全程基于DOM模型,原生支持往返过程中完整留存非语义内容:

  • 解析时会记录每个节点的注释位置、空白换行、缩进规则等细节
  • 序列化时严格复刻原文件的格式表现,包括多行字符串的换行方式、注释的排版
  • API简洁直观,无需额外配置即可实现格式无损往返

核心代码片段:

// 解析配置文件,保留格式元数据
var yamlMap = NetYaml.Deserialize<YamlMapping>("config.yaml");

// 修改配置节点
yamlMap["existing_setting"] = new YamlScalar("updated_value");

// 保存时完全保留原格式
NetYaml.Serialize("config.yaml", yamlMap);

关键注意事项

  • 必须使用DOM节点模型操作配置,禁止使用基于POCO对象的序列化/反序列化,否则会丢失格式信息
  • 测试时需覆盖所有场景:多行字符串、前后空白行、行内/块级注释、JSON子结构等,确保往返后文件内容无差异

内容的提问来源于stack exchange,提问作者Knowleech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:39:57