0

我正在尝试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;
}

那么,如何InfoFiles用 Yaml.Net 术语来描述该领域呢?
问题是我不知道编译时的字段名称。
所以,YamlAlias可能不会有帮助。

PS 请参阅https://dotnetfiddle.net/HD2JXM以查看结构描述示例

4

1 回答 1

2

您可以使用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));    
于 2015-12-29T13:35:47.977 回答