如何为 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));
我正在尝试反序列化 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));