繁体   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