这是我的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])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径'logInResult',第1行,第15位。
答案 0 :(得分:8)
您应该创建以下类,以便将您的json数据映射到实际的类。
public void UpdatePanel(Panel panel, Button button)
{
if(panel.InvokeRequired)
{
panel.Invoke(new Action<Panel,Button>(UpdatePanel), new object[] {panel, button});
}
else
{
panel.Controls.Add(button);
}
}
然后,您可以存储RootObject以进行进一步处理:
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; }
}
通过使用列表的getter,您可以获取列表并照常迭代它。
答案 1 :(得分:3)
您的问题似乎与以下内容重复:Using JsonConvert.DeserializeObject to deserialize Json to a C# POCO class
您正尝试将JSON 对象反序列化为JSON 数组。
仅将logInResult
的内容存储到jsonString
,即:
[{"Name":"yogesh singh","cityName":"","img":"DefaultImage\/D_Vp_Men.png","usrId":"374"}]
这当然假设您首先确定了JClass
。
答案 2 :(得分:0)
你的C#代码认为它正在读这个:
[
{
"Name": "yogesh singh",
"cityName": "",
"img": "DefaultImage/D_Vp_Men.png",
"usrId": "374"
}
]
即。一个对象数组,实际上它正在读取一个带有属性logInResult的对象,这是一个数组。
答案 3 :(得分:0)
我遇到了同样的问题,只是想指出当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是您可以自己给出的名称,与类名
无关答案 4 :(得分:0)
转换为对象集合
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
}