当每个对象的根节点使用它的 ID 命名时,使用 YamlDotNet 反序列化 YAML?
Deserializing YAML using YamlDotNet when the root node of each object is named using it's ID?
我正在使用 C#,我有一个要反序列化的 YAML 文件。
我看过使用 YamlDotNet,看起来还不错,但我找不到如何处理这种情况。
我正在使用的 YAML 文本具有以下格式:
1:
id: 1
name: foo
2:
id: 2
name: foo
我希望它看起来像这样,但事实并非如此:
- id: 1
name: foo
- id: 2
name: foo
我当然可以通过遍历每个节点并手动创建数据对象实例,恢复到更手动地做所有事情,但似乎仍然应该有一种方法可以在处理时从 YamlDotNet 轻松使用这个烦人的数据结构。
我乐于接受有关 .NET 中其他 YAML 解析库的建议。
我在另一个 SO 问题中找到了答案:Seeking guidance reading .yaml files with C#
通过反序列化为 Dictionary<int, Item>
我可以成功处理这个数据结构。
deserializer.Deserialize<Dictionary<int, Item>>(textReader);
如果您使用列表作为您的编辑,您可以使用类似于以下的代码轻松反序列化该文件:
class MyObject {
public int Id { get; set; }
public string Name { get; set; }
}
var deserializer = new DeserializerBuilder()
.WithNamingConvention(new CamelCaseNamingConvention())
.Build();
var result = deserializer.Deserialize<List<MyObject>>(File.OpenText("myfile.yml"));
注意:我正在 phone 上打字,无法测试代码。应该大部分是正确的,但我没有测试过。
我正在使用 C#,我有一个要反序列化的 YAML 文件。
我看过使用 YamlDotNet,看起来还不错,但我找不到如何处理这种情况。
我正在使用的 YAML 文本具有以下格式:
1:
id: 1
name: foo
2:
id: 2
name: foo
我希望它看起来像这样,但事实并非如此:
- id: 1
name: foo
- id: 2
name: foo
我当然可以通过遍历每个节点并手动创建数据对象实例,恢复到更手动地做所有事情,但似乎仍然应该有一种方法可以在处理时从 YamlDotNet 轻松使用这个烦人的数据结构。
我乐于接受有关 .NET 中其他 YAML 解析库的建议。
我在另一个 SO 问题中找到了答案:Seeking guidance reading .yaml files with C#
通过反序列化为 Dictionary<int, Item>
我可以成功处理这个数据结构。
deserializer.Deserialize<Dictionary<int, Item>>(textReader);
如果您使用列表作为您的编辑,您可以使用类似于以下的代码轻松反序列化该文件:
class MyObject {
public int Id { get; set; }
public string Name { get; set; }
}
var deserializer = new DeserializerBuilder()
.WithNamingConvention(new CamelCaseNamingConvention())
.Build();
var result = deserializer.Deserialize<List<MyObject>>(File.OpenText("myfile.yml"));
注意:我正在 phone 上打字,无法测试代码。应该大部分是正确的,但我没有测试过。