簡體   English   中英

如何在 C# 中使用 Newtonsoft.json 解析具有不同名稱的 JSON 子節點列表

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

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