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

Sam*_*wat 2 c# json json.net

这是我的JSON数据

{
    "logInResult": [
        {
            "Name": "yogesh singh",
            "cityName": "",
            "img": "DefaultImage/D_Vp_Men.png",
            "usrId": "374"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码

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();
}
Run Code Online (Sandbox Code Playgroud)

而错误是

无法将当前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位.

Kru*_*ada 12

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

试试以下代码:

JObject jsonResponse = JObject.Parse(jsonString);
JObject objResponse = (JObject)jsonResponse["logInResult"];
Dictionary<string, JArray> _Data = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, JArray>>(objResponse.ToString());
Run Code Online (Sandbox Code Playgroud)

希望这会帮助你.


typ*_*e34 8

您应该创建以下类,以便将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; }
}
Run Code Online (Sandbox Code Playgroud)

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

var result = JsonConvert.DeserializeObject<RootObject>(jsonString);
Run Code Online (Sandbox Code Playgroud)

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