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



这是我的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
 }

相关内容

  • 没有找到相关文章

最新更新