c# - 将 Yaml 反序列化为 c# 集合
问题描述
我有以下yaml结构:
TestPaySignService:
Test:
TestString:
settings-key: TestStringValue
types:
- type1
- type2
TestString2:
settings-key: TestStringValue2
types:
- type1
- type2
我想解析这个 yaml 并将“settings-key”和“types”一起存储在 c# 集合中,例如 List,如下所示:
[
{
name: TestStringValue,
types: ["type1", "type2"]
},
{
name: TestStringValue2,
types: ["type1", "type2"]
}
]
我已经关注了 follwin 问题并尝试了接受的答案的代码,但现在看来它已经过时了:反序列化 YAML“数据表”
PS我的yaml模式每次都会改变,但总是包含“settings-key”和“types”,所以我想创建类似“动态解析器”的东西
解决方案
您可以将 yaml 反序列化为动态对象,然后走一点。类似于以下内容:
public static void Main()
{
var r = new StringReader(@"TestPaySignService:
Test:
TestString:
settings-key: TestStringValue
types:
- type1
- type2
TestString2:
settings-key: TestStringValue2
types:
- type1
- type2");
var deserializer = new Deserializer();
var yamlObject = deserializer.Deserialize<dynamic>(r)["TestPaySignService"]["Test"].Values;
// just to print the json
var serializer = new JsonSerializer();
serializer.Serialize(Console.Out, yamlObject);
}
输出
[{
"settings-key": "TestStringValue",
"types": [
"type1",
"type2"
]
},
{
"settings-key": "TestStringValue2",
"types": [
"type1",
"type2"
]
}]
如果你需要使用TestString,你应该把它反序列化成一个对象。
推荐阅读
- vue.js - VueJS 动态数据 + v-model
- python-3.x - 无法使用 Python OpenCV 4.1.2-dev 读取 .avi 文件
- mysql - 如何通过 id 选择值的总和?SQL
- google-maps - 授予权限后重新加载我的位置按钮
- java - 使用 java.lang.Class 初始化(加载)一个 java 类
实例 - python - 如何在 django 翻译上禁用模糊?
- node.js - 设备影子状态不变
- c++ - 将参数从一个函数传递到另一个函数(没有模板) - C++
- powershell - 如何获得两个两个元素数据集之间的不同对象?
- python - 在 Python 中从阈值图像中去除小轮廓和噪声