【问题标题】:Deserialize Yaml into c# collection将 Yaml 反序列化为 c# 集合
【发布时间】:2018-07-26 11:32:18
【问题描述】:

我有以下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 问题并尝试了接受的答案代码,但现在看来它已经过时了:Deserialize a YAML "Table" of data

附:我的 yaml 架构每次都会更改,但始终包含“设置键”和“类型”,所以我想创建类似“动态解析器​​”的东西

【问题讨论】:

标签: c# yaml yamldotnet


【解决方案1】:

您可以将 yaml 反序列化为动态对象,然后稍微走一走。类似于以下内容:

Try it Online!

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,你应该把它反序列化成一个对象。

【讨论】:

猜你喜欢
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
相关资源
最近更新 更多