YamlDotNet - 需要反序列化器来忽略额外的节点或者对丢失的节点没问题

时间:2017-06-10 06:33:20

标签: .net yamldotnet

我正在尝试使用YamlDotNet来帮助我解析配置文件。我研究了它的文档并找到了两种方法:

  1. 使用YamlStream'的Load()方法,然后检查它创建的YamlDocument的节点;
  2. 为结果存储编写一系列相关类,然后使用Deserializer的Deserialize()方法自动使用数据实例化和填充对象。
  3. 第一种方法并不是特别优雅(代码很乱)。但它允许我有额外的"标签:价值"输入文件中的对。任何额外的东西都会被忽略我也可以在我的代码中使用逻辑来检测是否有任何"标签"缺少并跳过尝试读取其值。

    第二种方法非常优雅,而且代码非常干净。然而,它扼杀了额外的标签:价值"对。此外,如果有任何预期的"标签:价值"输入文件中缺少对,它也会引发异常。

    我正在寻找一种方法来使用第二种方法(调用Deserialize方法),但即使输入文件中有额外的数据,或者缺少某些东西,也允许它工作。

    我没有找到"可选"我希望我可以将属性应用于对象模型的成员。

    如果在使用反序列化方法时可以使用可选节点或额外的未使用节点,有人可以教育我吗?

1 个答案:

答案 0 :(得分:0)

第二种方法实际上是可行的。您需要执行以下操作:

  1. 为YAML文件中可能缺少的所有字段指定默认值,例如:
CellMeasurer
  1. 告诉反序列化器忽略不匹配的属性,如下面的代码片段所示。
[DefaultValue(1)]
public double Priority { get; set; }

我找不到有关此配置选项的任何文档,但对我来说,它可以正常运行。我唯一能找到的是PR功能引入的地方。

相关问题