c# - 如何使用 YAMLDotNet 反序列化 YAML?
问题描述
我想用 YAMLDotNet 反序列化这个 YAML。
它具有序列和嵌套映射。
- 数据.yml
people:
- name: "John"
age: 20
- name: "Michael"
age: 21
- name: "William"
age: 22
network:
address: "192.168.1.1"
port: 1234
param:
paramNumber: 10
paramString: "text data"
paramBool: true
这是我的代码。但是,它无法编译。我想知道以下两件事。
- 如何定义类来反序列化嵌套映射?
- 如何访问它?
- 打印反序列化数据
DeserializedObject obj = YamlImporter.Deserialize("data.yml");
foreach(var people in obj.people)
{
Console.WriteLine(people.name);
Console.WriteLine(people.age);
}
Console.WriteLine(obj.network["address"]);
Console.WriteLine(obj.network["port"]);
/* how to access param? */
- 解串器代码 (YAMLDotNet)
public class YamlImporter
{
public static DeserializedObject Deserialize(string yamlName)
{
StreamReader sr = new StreamReader(yamlName);
string text = sr.ReadToEnd();
var input = new StringReader(text);
var deserializer = new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
DeserializedObject deserializeObject = deserializer.Deserialize<DeserializedObject>(input); /* compile error */
return deserializeObject;
}
}
public class DeserializedObject
{
public List<People> people { get; set; }
public class People
{
public string name { get; set; }
public int age { get; set; }
}
public Dictionary<string, Network> network { get; set; }
public class Network
{
public string address { get; set; }
public int port { get; set; }
public Dictionary<string, Param> param { get; set; }
}
public class Param
{
public int paramNumber { get; set; }
public string paramString { get; set; }
public bool paramBool { get; set; }
}
}
谢谢,
解决方案
@AluanHaddad 的建议帮助我解决了我的问题。谢谢,
// How to access params? //
Console.WriteLine(obj.network.param.paramNumber);
Console.WriteLine(obj.network.param.paramString);
Console.WriteLine(obj.network.param.paramBool);
//public Dictionary<string, Network> network { get; set; }
public Network network { get; set; }
public class Network
{
public string address { get; set; }
public int port { get; set; }
//public Dictionary<string, Param> param { get; set; }
public Param param { get; set; }
}
推荐阅读
- docker - Dockerfile 的 RUN 命令找不到脚本
- jquery - jQuery按钮切换不起作用
- html - 选项卡式导航栏 Bootstrap4 中的手风琴
- django - Django:如果链接与 urlpatterns 不匹配,则重定向
- react-native - 为什么带有 react-native 的 redux-offline 不发送 POST 请求?
- etw-eventsource - 如何在 EventSource 中记录多个字段
- c - c中的排序算法实现
- amazon-web-services - Jenkins 有什么方法可以选择 Spring Boot 配置文件?
- swift - 嵌套“for”循环中并发SKAction序列的完成块?
- android - Android 8.0 adb 设备授权后一直未授权