如何指定“;任何名称“;Yaml.Net的字段

本文关键字:Net 字段 Yaml 任何名 何指定 | 更新日期: 2023-09-27 18:28:19

我正在尝试使用Yaml.Net库反序列化指定的YAML

version: '5'
infoFiles:
   <relative path to file 1>: <int number>
   <relative path to file 2>: <int number>
   ...
   <relative path to file N>: <int number>

例如:

dir1/file1 : '1'
dir2/dir3/file2 : '5"

为了反序列化任何YAML文件,我们需要使用C#类来描述它:

var deserializer = new Deserializer( null, new CamelCaseNamingConvention() );
var myYamlData = ( Yaml )deserializer.Deserialize( textReader, typeof( MyYamlDataClass ) );
...
class MyYamlDataClass
{
    public int Version;
    public **what type to use here?**[] InfoFiles;
}

那么,如何用Yaml.Net术语来描述InfoFiles字段呢
问题是我在编译时不知道字段名
因此,YamlAlias可能没有帮助。

p.S.参见https://dotnetfiddle.net/HD2JXM查看结构描述示例

如何指定“;任何名称“;Yaml.Net的字段

您可以使用Dictionary<string,int>,字段也应该是属性。所以最后一个类应该是这样的:

public class MyYamlDataClass
{
  public int Version { get; set; }
  public Dictionary<string, int> InfoFiles { get; set; }
}

还要注意,您根本不必指定反序列化类型。在这种情况下,解串器返回到Dictionary<object,object>

var foo = @"version: '5'
infoFiles:
  patha: 1
  pathb: 2
  pathc: 3";
var deserializer = new Deserializer(null, new CamelCaseNamingConvention());
var bar = (Dictionary<object,object>)deserializer.Deserialize(new StringReader(foo));