簡體   English   中英

如何使用 yamldo.net 序列化動態 json object

[英]how to serialize dynamic json object with yamldotnet

我正在嘗試使用 YamlDotNet 庫從 json 創建 yaml 文件,但我需要使用動態 object 因為我不知道他們會發送給我什么類型的 object,

我為這樣的序列化創建了 base class:

public class plugins
{
     public string name { get; set; }
     public object config { get; set; }
}

編輯當我按照 StriplingWarrior 所說的那樣編輯它時,它起作用了。

public class plugins
{
     public string name { get; set; }
     public IDictionary<string, object> config { get; set; }
}

編輯 2

我不知道我的 json 文件會是什么樣子,因為我嘗試使用動態,當我使用IDictionary<string, object>它有效但是當我的 json 數據在列表中有列表時,結果再次為空,我如何需要更改我的 class 還是我需要編寫自己的轉換器?

    {
        "name": "correlation-id",
        "config": {
            "add": {
                "headers": [
                    "content-encoding:deflate,gzip",
                    "accept-encoding:deflate,gzip;q=1.0,*;q=0.5%"
                ]
            }
        }
    }

結果:

    plugins:
    - name: correlation-id
      config:
        generator: uuid
        header_name: Aura-Correlation-Id
        echo_downstream: true
    - name: correlation-id
      config:
        config: data
        header_name: Aura-Correlation-Id
        val3: true
    - name: correlation-id
      config:
        add:
          headers:
          - []
          - []

編輯 2 結束

我的 json 值是這樣的:

[
    {
        "name": "corr-id",
        "config": {
            "generator": "uuid",
            "header_name": "-Id",
            "echo_downstream": true
        }
    },
    {
        "name": "cation-id2",
        "config": {
            "val4": "val3",
            "header_name": "Aura-Id",
            "echo_downstream": true,
            "title": "kube"
        }
    },
    {
        "name": "ation-id2",
        "config": {
            "val1": "val2",
            "title": "val3"
        }
    },
    {
        "name": "ati2",
        "config": {
            "contact": "some val",
            "group": "lenght",
            "title": "transform"
        }
    }
]

最終結果是這樣的:

    plugins:

    - name: corr-id

      config:

        generator: []

        header_name: []

        echo_downstream: &o0 []

    - name: cation-id2

      config:

        val4: &o1 []

        header_name: []

        echo_downstream: *o0

        title: []

    - name: ation-id2

      config:

        val1: []

        title: *o1

    - name: ati2

      config:

        contact: []

        group: []

        title: []

我嘗試發送到序列化器 json 字符串,但返回給我相同的數據,我也嘗試制作新的 JObject 並添加所有值這個 object 但它沒有用。

解決方案是:

object更改為IDictionary<string, object>

public class plugins
{
     public string name { get; set; }
     public IDictionary<string, object> config { get; set; }
}

使用Cinchoo ETL - 一個開源庫,您只需幾行代碼即可輕松完成轉換

using (var r = new ChoJSONReader("*** JSON file path ***"))
{
    using (var w = new ChoYamlWriter("*** Yaml file path ***"))
    {
        dynamic rec = new ChoDynamicObject();
        rec.plugins = r.ToArray();
        
        w.Write(rec);
    }
}

Output:

plugins:
  - name: corr-id
    config:
      generator: uuid
      header_name: -Id
      echo_downstream: true
  - name: cation-id2
    config:
      val4: val3
      header_name: Aura-Id
      echo_downstream: true
      title: kube
  - name: ation-id2
    config:
      val1: val2
      title: val3
  - name: ati2
    config:
      contact: some val
      group: lenght
      title: transform

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM