Cannot deserialize the current JSON object (e.g. {"name":"value"})

33,802

Solution 1

You can't directly deserialize from your API response using JsonConvert.DeserializeObject.

Try this below code :

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

Hope this will help you.

Solution 2

You should create the following classes in order to map your json data to actual classes.

    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; }
}

You can then store the RootObject for further processing:

var result = JsonConvert.DeserializeObject<RootObject>(jsonString);

By using the getter for the list, you can get the list and iterate it as usual.

Solution 3

Your question seems to be a duplicate of: Using JsonConvert.DeserializeObject to deserialize Json to a C# POCO class


You are trying to deserialize your JSON object into an JSON array.

Store just the content of logInResult into jsonString, that is:

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

This of course assumes that you got your JClass correct in the first place.

Share:
33,802
Samir Rawat
Author by

Samir Rawat

Updated on August 02, 2021

Comments

  • Samir Rawat
    Samir Rawat over 2 years

    This is my JSON data

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

    and this is my code

    public async Task<ActionResult> Index()
    {
    
        HttpClient webClient1 = new HttpClient();
        Uri uri = new Uri("http://m.vinipost.com/service/userprofile.svc/[email protected]&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();
    }
    

    and the error is

    Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[MvcSumit1.Models.JClass]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'logInResult', line 1, position 15.

  • Admin
    Admin over 8 years
    hey one question, what is ["logInResult"] ? used as string?
  • Krunal Mevada
    Krunal Mevada about 8 years
    @NathielPaulino "logInResult" is nothing but json string JArray key. For more clarification please see "logInResult": [ in posted question. Hope you now clear.
  • Lahib
    Lahib about 8 years
    @KrunalMevada This helped me with my project. Thanks. This should def. be marked as the answer.