gpt4 book ai didi

c# - 从 JSON 检索项目时获取 'Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken'

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:53 26 4
gpt4 key购买 nike

当有如下代码时

var TermSource =
token.Value<JArray>("annotations")
.Values<string>("Term Source")
.FirstOrDefault();

我能够获得以下 JSON block 的结果

"annotations": [
{
"Preferred Term": "Text1"
},
{
"Term Source": "Text2"
}
],

但是,当运行以下行时

var country_code_iso3166_alpha2 =
token.Value<JArray>("datatype_properties")
.Values<string>("country_code_iso3166_alpha2")
.FirstOrDefault();

对于以下 JSON block

"datatype_properties": {
"country_name_iso3166_short": [
"Text Text"
],
"country_code_iso3166_alpha2": [
"txt1"
],
"country_code_iso3166_alpha3": [
"txt2"
],
"country_code_un_numeric3": [
"10"
]

出现以下错误

'无法将 Newtonsoft.Json.Linq.JObject 转换为 Newtonsoft.Json.Linq.JToken'

我应该如何修复 LINQ 语句以检索“country_code_iso3166_alpha2”数据的值

最佳答案

您正在尝试访问 datatype_properties就好像它是一个数组。它不是 - 它是另一个具有属性 country_code_iso3166_alpha3 的对象它有一个数组值。

您可以调用Value使用 JObject 的方法输入参数以获取对象,然后输入 Value再次使用 JArray类型参数以获取数组。这是一个简短但完整的示例:

using System;
using System.Linq;
using Newtonsoft.Json.Linq;

class Test
{
static void Main()
{
string json = @"{
'datatype_properties': {
'country_name_iso3166_short': [
'Text Text'
]
}
}".Replace("'", "\"");
JObject parent = JObject.Parse(json);
string countryName = parent["datatype_properties"]
.Value<JArray>("country_name_iso3166_short")
.Values<string>()
.FirstOrDefault();
Console.WriteLine(countryName);
}
}

关于c# - 从 JSON 检索项目时获取 'Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49611958/

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