无法反序列化当前的JSON对象(例如{“name”:“value”})

这是我的JSON数据

{ "logInResult": [ { "Name": "yogesh singh", "cityName": "", "img": "DefaultImage/D_Vp_Men.png", "usrId": "374" } ] } 

这是我的代码

 public async Task Index() { HttpClient webClient1 = new HttpClient(); Uri uri = new Uri("http://m.vinipost.com/service/userprofile.svc/logIn?loginId=thyschauhan@gmail.com&pass=12345"); HttpResponseMessage response1; response1 = await webClient1.GetAsync(uri); var jsonString = await response1.Content.ReadAsStringAsync(); var _Data = JsonConvert.DeserializeObject<List>(jsonString); foreach (JClass Student in _Data) { ViewBag.Message += Student.Name + ", "; } dynamic obj = JsonConvert.DeserializeObject(jsonString); ViewBag.Message += obj.data.Name; return View(); } 

而错误是

无法将当前JSON对象(例如{“name”:“value”})反序列化为类型’System.Collections.Generic.List`1 [MvcSumit1.Models.JClass]’,因为该类型需要JSON数组(例如[1, 2,3])正确反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径’logInResult’,第1行,第15位。

您无法使用JsonConvert.DeserializeObject.直接从API响应反序列JsonConvert.DeserializeObject.

试试以下代码:

 JObject jsonResponse = JObject.Parse(jsonString); JObject objResponse = (JObject)jsonResponse["logInResult"]; Dictionary _Data = Newtonsoft.Json.JsonConvert.DeserializeObject>(objResponse.ToString()); 

希望这会帮助你。

您应该创建以下类,以便将json数据映射到实际的类。

  public class LogInResult { public string Name { get; set; } public string cityName { get; set; } public string img { get; set; } public string usrId { get; set; } } public class RootObject { public List logInResult { get; set; } } 

然后,您可以存储RootObject以进行进一步处理:

 var result = JsonConvert.DeserializeObject(jsonString); 

通过使用列表的getter,您可以获取列表并像往常一样迭代它。

您的问题似乎与以下内容重复: 使用JsonConvert.DeserializeObject将Json反序列化为C#POCO类


您正在尝试将JSON 对象反序列化为JSON 数组

只将logInResult的内容logInResultjsonString ,即:

[{"Name":"yogesh singh","cityName":"","img":"DefaultImage\/D_Vp_Men.png","usrId":"374"}]

这当然假设你首先让你的JClass正确。

你是C#代码认为它正在读这个:

 [ { "Name": "yogesh singh", "cityName": "", "img": "DefaultImage/D_Vp_Men.png", "usrId": "374" } ] 

即一个对象数组,实际上它正在读取一个具有属性logInResult的对象,该属性是一个数组。

我遇到了同样的问题,只想指出当JSON中存在数组或列表时就像在logInResults中是一个类型的列表,所以虽然反序列化JSON转换不能理解,所以你可以做到这一点以这种方式创建您的模型。

 Class giveName { givenName[] logInResult {get;set;} // can use list also will work fine } public class giveName2 { public string Name {get;set;} public string cityName {get;set;} public string img {get;set;} public string usrId {get;set;} } 

我会告诉你为什么因为看到你的json对象的第一个大括号让它工作,你必须创建一个类型(类),它有一个名为logInResult的属性,就像组成列表的对象一样提供一个类型,然后提供与列表项匹配的属性

注意:giveName和giveName2是你可以给自己的名字,它与类名无关