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