C# 如何指定;“任何名称”;Yaml.Net的字段
我正在尝试使用C# 如何指定;“任何名称”;Yaml.Net的字段,c#,.net,yaml,yamldotnet,C#,.net,Yaml,Yamldotnet,我正在尝试使用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> 要反序列化任何YAML文件,我们需要使用C#类对
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>
要反序列化任何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
可能不会有帮助
另请参见查看结构描述示例您可以使用
字典
,并且字段应为属性。最后一节课应该是这样的:
public class MyYamlDataClass
{
public int Version { get; set; }
public Dictionary<string, int> InfoFiles { get; set; }
}
公共类MyYamlDataClass
{
公共int版本{get;set;}
公共字典信息文件{get;set;}
}
还要注意,您根本不必指定反序列化类型。在这种情况下,反序列化程序恢复为字典
var foo=@“版本:'5'
信息文件:
路径:1
路径B:2
路径C:3”;
var deserializer=新的反序列化器(null,new CamelCaseNamingConvention());
var bar=(字典)反序列化器;
Heh,我自己已经找到了这个解决方案:)不过,谢谢您抽出时间。我将标记您的答案,同样,序列化此内容也不那么琐碎:yamldescriper descriper=newyamldescriper(_path);descripber.Append(“infoFiles:”).NewLine().Join(myYamlData.infoFiles,(i,d)=>d.Append(“”)。Append(i.Key)。Append(“”):“”)。Append(i.Value)。Append(“”),d=>d.NewLine())
public class MyYamlDataClass
{
public int Version { get; set; }
public Dictionary<string, int> InfoFiles { get; set; }
}
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));