【发布时间】:2019-10-26 01:19:50
【问题描述】:
我对 json.net 的使用相对流利,但我很难以一种直接的方式提取这个值。
我觉得 json.net 应该能够推断出我正在尝试做的事情,这样我就不必一路走来获得我想要的东西。
下面是我第一次失败的尝试和第二次我开始工作的尝试。虽然第二次尝试确实有效,但我想简化代码,使其更像第一次。
请注意,我不能假设“C”对象是包含我想要的对象的对象。
var jt = JToken.Parse(@"{
""A"": {
""name"": ""object1"",
""order"": ""1"",
""type"": ""val""
},
""B"": {
""order"": ""2"",
""type"": ""val"",
},
""C"": {
""name"": ""object3"",
""type"": ""val"",
""answer"": ""Yes"", ""<------ comment"": ""this is the value I'm trying to get""
}
}");
//var firstAttempt = (jt.First(j => j["name"] == "object3"))["answer"]; // cannot be applied to operands of type 'JToken' and 'String'
var thisWorksFine = jt.First(a => a.ToObject<JProperty>()
.Value.ToObject<JObject>()["name"]?.ToString() == "object3")
.ToObject<JProperty>()
.Value["answer"];
所以我的问题是,有没有一种方法可以在不必强制转换每个对象/属性的情况下获得价值,并最终获得看起来更像我第一次尝试的代码?如果我的第二次尝试或多或少是必须要做的,那很好。
【问题讨论】:
-
谢谢大家,我添加了一个注释,我不想假设对象 C 包含我想要的值,因为它可能会改变。
-
只需反序列化为模型......