我正在尝试使用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查看结构描述示例
您可以使用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));