反序列化嵌套字典
Deserialize a nested dictionary
我想将 YAML 文档转换为对象图 using YamlDotNet deserializer。以下是 yhe YAML 文件的示例。
desks:
- A5
- A6
- A7
- A8
- ...
employees:
- E00
- E10
- E20
- ...
schedule:
0:
E00: A0
E10: A1
E100: A10
E20: A2
E30: A3
E40: A4
E50: A5
E60: B0
E70: F3
E80: A8
E90: A9
1:
E00: A0
E10: A1
E100: A10
E20: A2
E30: A3
E40: A4
E50: A5
E60: B0
E70: F3
E80: A8
E90: A9
...
按照我之前链接的指南,我创建了一个 Scheduler 封装了我的 YAML 文档中要使用
进行转换的所有节点
var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.Build();
var order = deserializer.Deserialize<Scheduler>(input);
public class Scheduler
{
public List<string> desks { get; set; }
public List<string> employees { get; set; }
}
但是,我不知道如何表示schedule
节点,它是一个可变长度的嵌套字典。
- 外部字典 将整数映射到内部字典。
- 内部字典 将字符串映射到字符串。
我可以在 C# 中使用哪种数据结构来表示这样的 YAML 结构?
我成功了,但我很好奇是否有更好的方法。我有 JSON 反序列化经验,但没有太多 YAML 反序列化经验。
public class Scheduler
{
public List<string> desks { get; set; }
public List<string> employees { get; set; }
public IDictionary<int, IDictionary<string,string>> schedule { get; set; }
}
我想将 YAML 文档转换为对象图 using YamlDotNet deserializer。以下是 yhe YAML 文件的示例。
desks:
- A5
- A6
- A7
- A8
- ...
employees:
- E00
- E10
- E20
- ...
schedule:
0:
E00: A0
E10: A1
E100: A10
E20: A2
E30: A3
E40: A4
E50: A5
E60: B0
E70: F3
E80: A8
E90: A9
1:
E00: A0
E10: A1
E100: A10
E20: A2
E30: A3
E40: A4
E50: A5
E60: B0
E70: F3
E80: A8
E90: A9
...
按照我之前链接的指南,我创建了一个 Scheduler 封装了我的 YAML 文档中要使用
进行转换的所有节点var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.Build();
var order = deserializer.Deserialize<Scheduler>(input);
public class Scheduler
{
public List<string> desks { get; set; }
public List<string> employees { get; set; }
}
但是,我不知道如何表示schedule
节点,它是一个可变长度的嵌套字典。
- 外部字典 将整数映射到内部字典。
- 内部字典 将字符串映射到字符串。
我可以在 C# 中使用哪种数据结构来表示这样的 YAML 结构?
我成功了,但我很好奇是否有更好的方法。我有 JSON 反序列化经验,但没有太多 YAML 反序列化经验。
public class Scheduler
{
public List<string> desks { get; set; }
public List<string> employees { get; set; }
public IDictionary<int, IDictionary<string,string>> schedule { get; set; }
}