[英]How to parse JSON child nodes list that have different names using Newtonsoft.json in C#
我希望將 JSON 解析為 C# 列表。 問題是我試圖解析的數據不是數組格式。 以下是示例 JSON
{
"results":{
"records":{
"record:8545314564":{
"name":"record 1",
"description":"description for record 1"
},
"record:2254698789":{
"name":"record 2",
"description":"description for record 2"
},
"record:7454687851":{
"name":"record 3",
"description":"description for record 3"
}
}
}
}
我的模型類看起來像這樣
public class Record
{
public string Name { get; set; }
public string Description { get; set; }
}
我正在尋找的是創建一個
List<Record> Records
我不關心記錄子節點的名稱(即記錄:8545314564,記錄:2254698789 等)。 我只關心每個記錄節點內的名稱和描述屬性。
如果有人可以在 C# 中提供示例代碼以實現所需的輸出,我將不勝感激。
還有另一種選擇:
using Newtonsoft.Json.Linq;
...
var jObject = JObject.Parse(yourJsonString);
var records = jObject["results"]["records"]
.Children()
.Children()
.Select(i => i.ToObject<Record>())
.ToList();
您可以在此處找到相關的 Json.NET 文檔: https ://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm
通過使用Dictionary
,您可以使用動態記錄名稱作為鍵。
public class Root
{
[JsonProperty("results")]
public Result Results { get; set; }
}
public class Result
{
[JsonProperty("records")]
public Dictionary<string, Record> Records { get; set; }
}
public class Record
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("description")]
public string Description { get; set; }
}
var data = JsonConvert.DeserializeObject<Root>(json);
您可以執行以下操作。
var result = JsonConvert.DeserializeObject<RootObject>(jsonString);
var recordCollection = result.results.records.Values.ToList();
其中 RootObject 定義為
public class RootObject
{
public ResultObject results { get; set; }
}
public class ResultObject
{
public Dictionary<string, RecordObject> records { get; set; }
}
public class RecordObject
{
public string name { get; set; }
public string description { get; set; }
}
輸出
您可以解析 Json,然后遍歷每個屬性值的標記。
// assuming json is your json string
JObject obj = JObject.Parse(json);
JToken sec = obj["results"]["records"];
foreach (JToken token in sec)
{
string name = token.First()["name"].ToString();
string description = token.First()["description"].ToString();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.