[英]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.