2 回答
TA贡献1906条经验 获得超10个赞
您可以使用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;
}
}
TA贡献1877条经验 获得超6个赞
首先,您的 Json 缺少开始/结束大括号。Json 需要用大括号括住 Test 值。
{
'Test':
{
'KIf42N7OJIke57Dj6dkh': {'name': 'test 1'},
'xsQMe4WWMu19qdULspve': {'name': 'test 2'}
}
}
如果原始 Json 中缺少它,您可以将当前输入的 Json 包装如下。
var correctedJson = $"{{{inputJsonString}}}";
如果您想将 Json 对象解析为数组Class1
而不创建额外的具体数据结构并使用JPath Queries,您可以使用Json.Net 证明的DeserializeAnonymousTypeAnonymous Types
方法来实现此目的。例如,
var sampleObject = new {Test = new Dictionary<string,Class1>()};
var data = JsonConvert.DeserializeAnonymousType(correctedJson,sampleObject);
var result = data.Test.Select(x=>x.Value).ToArray();
您还可以使用 JPath 查询或创建具体数据结构作为@Kalten 来实现它,如他的答案中所述。
- 2 回答
- 0 关注
- 83 浏览
添加回答
举报