这是我的JSON数据
{
"logInResult": [
{
"Name": "yogesh singh",
"cityName": "",
"img": "DefaultImage/D_Vp_Men.png",
"usrId": "374"
}
]
}
这是我的代码
public async Task<ActionResult> 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<JClass>>(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])或更改反序列化类型,使其是可以从 JSON 对象反序列化的普通 .NET 类型(例如,不是整数等基元类型,也不是数组或列表等集合类型)。还可以将 JsonObjectAttribute 添加到类型中,以强制它从 JSON 对象反序列化。 路径"logInResult",第 1 行,位置 15。
您无法使用 JsonConvert.DeserializeObject.
直接从 API 响应中反序列化
试试下面的代码:
JObject jsonResponse = JObject.Parse(jsonString);
JObject objResponse = (JObject)jsonResponse["logInResult"];
Dictionary<string, JArray> _Data = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, JArray>>(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> logInResult { get; set; }
}
然后,您可以存储根对象以供进一步处理:
var result = JsonConvert.DeserializeObject<RootObject>(jsonString);
通过使用列表的 getter,您可以获取列表并像往常一样迭代它。
您的问题似乎是以下内容的副本: 使用 JsonConvert.DeserializeObject 将 Json 反序列化为 C# POCO 类
您正在尝试将 JSON 对象反序列化为 JSON 数组。
仅将logInResult
的内容存储到jsonString
中,即:
[{"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 的属性,以同样的方式组成列表的对象必须提供一个类型,然后与列表项匹配的属性
注意:给名字和给名字2是你可以给自己起的名字,类名无关紧要
转换为对象的集合
using Newtonsoft.Json.Linq;
JObject obj = JObject.Parse(jsonString);
JArray arr = (JArray)obj["logInResult"];
IList<JClass> student= arr.ToObject<IList<JClass>>();
return View(student);
然后迭代它。
IEnumerable<Student>
@foreach (var item in Model)
{
item.Name
item.CityName
item.Img
item.UsrId
}