gpt4 book ai didi

c# - 从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象 : StartArray. 路径

转载 作者:IT王子 更新时间:2023-10-29 03:53:02 26 4
gpt4 key购买 nike

我正在开发一个涉及位置的 Windows Phone 8.1 应用程序。我正在从我的 API 接收 Json 数据。我的 API 返回的数据如下所示:

[{
"country": "India",
"city": "Mall Road, Gurgaon",
"area": "Haryana",
"PLZ": "122002",
"street": "",
"house_no": "",
"POI": "",
"type": "17",
"phone": "",
"lng": 77.08972334861755,
"lat": 28.47930118040612,
"formatted_address": "Mall Road, Gurgaon 122002, Haryana, India"
},
{
"country": "India",
"city": "Mall Road, Kanpur",
"area": "Uttar Pradesh",
"PLZ": "208004",
"street": "",
"house_no": "",
"POI": "",
"type": "17",
"phone": "",
"lng": 80.35783410072327,
"lat": 26.46026740300029,
"formatted_address": "Mall Road, Kanpur 208004, Uttar Pradesh, India"
},
{
"country": "India",
"city": "Mall Road Area, Amritsar",
"area": "Punjab",
"PLZ": "143001",
"street": "",
"house_no": "",
"POI": "",
"type": "17",
"phone": "",
"lng": 74.87286686897278,
"lat": 31.64115178002094,
"formatted_address": "Mall Road Area, Amritsar 143001, Punjab, India"
},
{
"country": "India",
"city": "Vasant Kunj (Mall Road Kishan Garh), New Delhi",
"area": "Delhi",
"PLZ": "110070",
"street": "",
"house_no": "",
"POI": "",
"type": "18",
"phone": "",
"lng": 77.1434211730957,
"lat": 28.51363217008815,
"formatted_address": "Vasant Kunj (Mall Road Kishan Garh), New Delhi 110070, Delhi, India"
}]

我正在反序列化我的 Json 数据并将其放入名为 LocationData 的类中。当我运行我的代码时,它给我一个错误:

Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path

我哪里错了?这是我的代码:

private async void GetAPIData()
{
string _serviceUrl = "https://api.myweblinkapiprovider/v2&q=" + UserRequestedLocation;
HttpClient client = new HttpClient();

HttpResponseMessage responce = await client.GetAsync(new Uri(_serviceUrl));

if (responce.Content != null)
{
var respArray = JObject.Parse(await responce.Content.ReadAsStringAsync());
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.NullValueHandling = NullValueHandling.Ignore;
settings.MissingMemberHandling = MissingMemberHandling.Ignore;
var rcvdData = JsonConvert.DeserializeObject<LocationData>(respArray.ToString(), settings);
UpdateMapData(rcvdData);
UpdateTextData(rcvdData);
}
}

我还尝试使用 JArray。我的代码如下:

 private async void GetAPIData()
{
string _serviceUrl = "https://api.myweblinkprovider.com/v3?fun=geocode&lic_key=MyKey" + UserRequestedLocation;
HttpClient client = new HttpClient();

HttpResponseMessage responce = await client.GetAsync(new Uri(_serviceUrl));

JArray arr = JArray.Parse(await responce.Content.ReadAsStringAsync());

foreach (JObject obj in arr.Children<JObject>())
{
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.NullValueHandling = NullValueHandling.Ignore;
settings.MissingMemberHandling = MissingMemberHandling.Ignore;
var rcvdData = JsonConvert.DeserializeObject<LocationData>(arr.ToString(), settings);
UpdateMapData(rcvdData);
UpdateTextData(rcvdData);
}
}

它也给我一个错误:

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'MMI_SpeechRecog.Model.LocationData' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

最佳答案

您问题的第一部分与 Why do I get a JsonReaderException with this code? 重复,但与(我的)答案最相关的部分是:

[A] JObject isn't the elementary base type of everything in JSON.net, but JToken is. So even though you could say,

object i = new int[0];

in C#, you can't say,

JObject i = JObject.Parse("[0, 0, 0]");

in JSON.net.

你要的是JArray.Parse ,它将接受您传递给它的数组(在您的 API 响应中用开头 [ 表示)。这就是错误消息中的“StartArray”告诉您的内容。

至于你使用JArray时发生了什么, 你正在使用 arr而不是 obj :

var rcvdData = JsonConvert.DeserializeObject<LocationData>(arr /* <-- Here */.ToString(), settings);

交换它,我相信它应该可以工作。

尽管我很想反序列化 arr直接作为 IEnumerable<LocationData> ,这将节省一些代码和遍历数组的工作量。如果您不打算单独使用解析后的版本,最好避免使用它。

关于c# - 从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象 : StartArray. 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34690581/

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