'Accessed JObject values with invalid key value: 1. Object property name expected.'



我正在尝试从api获取JSON数据。

我有一个json:

{
"elements": [
{
"id": 1,
"name": "Bob",
"address": "abc street",
"hobbies": {
"indoor": "Games, reading books",
"outdoor": ""
}
},
{
"id": 2,
"name": "Mark",
"address": "def street",
"hobbies": {
"indoor": "Games, reading books",
"outdoor": ""
}
} 
]
}

我随身携带以下代码:

using(var httpClient = new HttpClient()) {
HttpResponseMessage response = httpClient.GetAsync("api_url_here").Result;
var studentJsonString = response.Content.ReadAsStringAsync().Result;
var Jsresult = new JavaScriptSerializer().Deserialize<dynamic>(studentJsonString).ToString();
JObject jObject = JObject.Parse(Jsresult);
IEnumerable<dynamic> listDyn = jObject[0].Select(items => new StudentModel// gives error here as whole
{
id = items["id"].ToString(),
name = items["name"].ToString(),
address= items["address"].ToString()
});
}

但是当我调用上面的方法时,它给了我一个错误:

'访问的JObject值具有无效键值:1。应为对象属性名称。'

我缺少什么?

为什么要反序列化两次?的结果

JavaScriptSerializer().Deserialize(customerJsonString) 

已是对象。您不需要使用JObject.Parse()再次解析它。你可以直接做

JObject jObject= JObject.Parse(customerJsonString) 

此外,CCD_ 2的结果是字典而不是数组。它有属性,您可以通过它们的名称访问这些属性。例如

jObject["elements"]

当然,编译器不可能预测jObject["elements"]将是IEnumerable,所以你必须确保这一点。

jObject.Value<JArray>("elements").Select(item => ...)

这将读取jObject的属性elements作为JArray

最新更新