gpt4 book ai didi

c# - 从具有特定其他属性值的 JObject 中提取 JObject 属性

转载 作者:太空宇宙 更新时间:2023-11-03 22:29:42 31 4
gpt4 key购买 nike

我使用 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"];

所以我的问题是,有没有一种方法可以在不必强制转换每个对象/属性的情况下获取值,并最终获得看起来更像我第一次尝试的代码?如果我的第二次尝试或多或少是必须完成的,那很好。

最佳答案

我用过 QuickType制作 Json 代码的模型,然后对其进行解析并对生成的对象进行过滤,这要容易得多。代码:

public class MyElement
{
[JsonProperty("name")]
public string Name { get; set; }

[JsonProperty("order")]
public long Order { get; set; }

[JsonProperty("type")]
public string Type { get; set; }

[JsonProperty("answer")]
public string Answer { get; set; }
}

并解析:

string json = @"{
""A"": {
""name"": ""object1"",
""order"": ""1"",
""type"": ""val""
},
""B"": {
""order"": ""2"",
""type"": ""val"",

},
""C"": {
""name"": ""object3"",
""type"": ""val"",
""answer"": ""Yes"",
}
}";

Dictionary<string, MyElement> elements = JsonConvert.DeserializeObject<Dictionary<string, MyElement>>(json);
string answerOfObject3 = elements.Values.FirstOrDefault(element => element.Name == "object3")?.Answer;

关于c# - 从具有特定其他属性值的 JObject 中提取 JObject 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58561016/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com