我有一個看起來像這樣的 JSON 檔案。
{
"id": "top1",
"components": [
{
"type": "resistor",
"id": "res1",
"resistance": {
"default": 100,
"min": 10,
"max": 1000
},
"netlist": {
"t1": "vdd",
"t2": "n1"
}
},
{
"type": "nmos",
"id": "m1",
"m(l)": {
"default": 1.5,
"min": 1,
"max": 2
},
"netlist": {
"drain": "n1",
"gate": "vin",
"source": "vss"
}
}
]
}
我想使用 oop 制作一個 API 來處理該 JSON 檔案,我制作了以下類。
public class Topology
{
[Required]
public string id { get; set; }
[Required]
public List<TopologyComponents> components { get; set; }
}
public class TopologyComponents
{
[Required]
public string type { get; set; }
[Required]
public string id { get; set; }
[Required]
public Values ???????? {get; set; }
[Required]
public Dictionary<string, string> netlist { get; set; }
}
public class Values
{
[Required]
public double @default { get; set; }
[Required]
public double min { get; set; }
[Required]
public double max { get; set; }
}
我的問題是那些問號???????欄位名稱是動態的resistance, m(l), .....
,我該如何處理這些情況?
我嘗試了 Jackson 注釋、expandobject 和字典。但沒有一個像我想要的那樣作業。
uj5u.com熱心網友回復:
從它的外觀來看,您的Topology類將需要具有Dictionary<string, dynamic>資料型別,因為 的鍵components是任意的。盡管type和id將在所有組件中相同,但netlist另一個屬性將是動態的。
將您的組件串列更改為Dictionary<string, dynamic>,然后通過首先檢查組件中實際存在的屬性來獲取您需要的資料。
public class Topology
{
[Required]
public string id { get; set; }
[Required]
public List<Dictionary<string, dynamic>> components { get; set; }
}
這將為您提供一個以字串為鍵、以動態物件為值的字典串列。您可以使用 foreach 回圈components.Keys和 switch 陳述句遍歷鍵,以查看在遍歷每個組件時是否存在您期望的鍵。
關于如何創建自己的組件串列的示例……不確定您將如何使用資料,因為這將推動您反序列化的方式,
var obj = JsonConvert.DeserializeObject<Topology>(jsonText);
List<dynamic> allComps = new List<dynamic>();
foreach(var component in obj.components)
{
var comp = new ExpandoObject() as IDictionary<string, object>;
foreach(var key in component.Keys)
{
switch (key)
{
case "id":
case "type":
comp.Add(key, component[key].ToString());
break;
case "netlist":
comp.Add(key, component[key].ToObject<Dictionary<string, string>>());
break;
default:
comp.Add(key, component[key].ToObject<Values>());
break;
}
}
allComps.Add(comp);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399052.html
上一篇:創建一個通用的工廠類
下一篇:從同一個父類的另一個類訪問物件
