我正在尝试使用 YamlDotNet 来帮助我解析配置文件。我研究了它的文档并发现了两种方法:
- 使用YamlStream的Load()方法,然后检查它创建的YamlDocument的节点;
- 编写一系列相关类用于结果存储,然后使用 Deserializer 的 Deserialize() 方法自动实例化对象并用数据填充对象。
第一种方法不是特别优雅(代码很乱)。但它允许我在输入文件中拥有额外的“标签:值”对。任何额外的内容都会被忽略。我还可以在代码中使用逻辑来检测是否缺少任何“标签”并跳过尝试读取其值。
第二种方法非常优雅,并且代码非常干净。然而,它会因为额外的“标签:值”对而窒息。此外,如果输入文件中缺少任何预期的“标签:值”对,它也会引发异常。
我正在寻找一种使用第二种方法(调用反序列化方法)的方法,但即使输入文件中存在额外数据或缺少某些内容,也允许它工作。
我没有找到我希望可以应用于对象模型成员的“可选”属性。
如果使用反序列化方法时可能有可选节点或额外未使用的节点,有人可以告诉我吗?
第二种方法其实也是可行的。您需要执行以下操作:
- 为 YAML 文件中可能缺少的所有字段指定默认值,如下所示:
[DefaultValue(1)]
public double Priority { get; set; }
- 告诉反序列化器忽略不匹配的属性,如以下代码片段所示。
var deserializer = new DeserializerBuilder()
.IgnoreUnmatchedProperties()
.Build();
var deserialized = deserializer.Deserialize<T>(input);
我找不到有关此配置选项的任何文档,但对我来说它按预期工作。我唯一能找到的是PR引入该功能的位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)