[英]Parse JSON Objects with unique strings as parents using JSON.Net
假设我有这个例子 JSON:
"Test": {
"KIf42N7OJIke57Dj6dkh": {
"name": "test 1"
},
"xsQMe4WWMu19qdULspve": {
"name": "test 2"
}
}
我想将其解析为我拥有的自定义 class 的数组,下面将举例说明:
class Class1 {
public string Name { get; set; }
Class1(string name) {
Name = name;
}
}
如何使用 Json.NET 的JObject.Parse
解析这个?
您可以使用JPath查询来实现您的目标,如下所示:
var myArray = JObject
.Parse(json)
.SelectTokens("$.Test..name")
.Values<string>()
.Select(s => new Class1(s))
.ToArray();
但可能不是最好的方法。
我个人更喜欢创建类来表示 json 结构,然后应用转换。
void Main()
{
var json = @"{""Test"": {
""KIf42N7OJIke57Dj6dkh"": {
""name"": ""test 1""
},
""xsQMe4WWMu19qdULspve"": {
""name"": ""test 2""
}
}
}";
var root = JsonConvert.DeserializeObject<Root>(json);
var array = root.Test.Select(i => i.Value).ToArray();
array.Dump();
}
public class Root
{
public Dictionary<string, Class1> Test { get; set; }
}
public class Class1
{
public string Name { get; set; }
public Class1(string name)
{
Name = name;
}
}
首先,您的 Json 缺少开始/结束大括号。 Json 需要有环绕测试值的大括号。
{
'Test':
{
'KIf42N7OJIke57Dj6dkh': {'name': 'test 1'},
'xsQMe4WWMu19qdULspve': {'name': 'test 2'}
}
}
如果您在原始 Json 中缺少它,您可以将当前输入 Json 包装如下。
var correctedJson = $"{{{inputJsonString}}}";
如果您想在不创建其他具体数据结构和使用JPath 查询的情况下将 Json 对象解析为Class1
的数组,则可以使用Anonymous Types
,使用 Json.Net 证明的DeserializeAnonymousType方法。 例如,
var sampleObject = new {Test = new Dictionary<string,Class1>()};
var data = JsonConvert.DeserializeAnonymousType(correctedJson,sampleObject);
var result = data.Test.Select(x=>x.Value).ToArray();
您也可以使用 JPath Query 或创建具体数据结构作为@Kalten 来实现它,如他的回答中所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.