如何为 Yaml.Net 指定 "any name" 字段

How to specify "any name" field for Yaml.Net

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

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 以查看结构描述示例

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

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));