sushil
sushil

Reputation: 55

Cannot deserialize the current JSON object into type 'System.Collections.Generic.List

I am trying to read my JSON result.

Here is my JsonResult

public class JsonResult
    {
    public string ResponseStatus;
    public string Status;
    public string Remarks;
    public string ErrorCode;
    public List<Data> data;    


    }
public class Data
{
    public string Status;
    public DateTime Date;
    public string Number;
    public string Amount;
    public string Balance;
    public string TranId;
    public string OPTId;
    public string RefId;

}

Here is my JSON result

{
"ResponseStatus":"1",
"Status":"Success",
"Remarks":"Your recharge has been Pending.",
"ErrorCode":"3",
"Data":
    {
    "Status":"Pending",
    "Date":"2017-02-23T17:22:26.2001954+05:30",
    "Number":"9915933511",
    "Amount":10.0,
    "Balance":137.714,
    "TranId":"1126887",
    "OPTId":"","RefId":""
    }
}

Here is my code to read the result

var result = JsonConvert.DeserializeObject<List<JsonResult>>(retPKT);

But Getting Exception..

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[JsonResult+Data]' 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 'Data.Status', line 1, position 118.

How can I fix this?

Upvotes: 1

Views: 7399

Answers (3)

mindOfAi
mindOfAi

Reputation: 4622

Data isn't a list, it's an object. Your models should look like this (Only JsonResult is modified):

public class Data
{
    public string Status { get; set; }
    public string Date { get; set; }
    public string Number { get; set; }
    public double Amount { get; set; }
    public double Balance { get; set; }
    public string TranId { get; set; }
    public string OPTId { get; set; }
    public string RefId { get; set; }
}

public class JsonResult
{
    public string ResponseStatus { get; set; }
    public string Status { get; set; }
    public string Remarks { get; set; }
    public string ErrorCode { get; set; }
    public Data Data { get; set; }
}

Hope it helps!

Upvotes: 0

Karthik AMR
Karthik AMR

Reputation: 1714

If you want to send list of data List<Data> then in JSON it should be in a form of array

Change the following JSON content

"Data": {"Status":"Pending",
"Date":"2017-02-23T17:22:26.2001954+05:30",
"Number":"9915933511",
"Amount":10.0,"Balance":137.714,
"TranId":"1126887","OPTId":"","RefId":""}

To

"Data": [{"Status":"Pending",
"Date":"2017-02-23T17:22:26.2001954+05:30",
"Number":"9915933511",
"Amount":10.0,"Balance":137.714,
"TranId":"1126887","OPTId":"","RefId":""}]

Upvotes: 2

Ciprian Lipan
Ciprian Lipan

Reputation: 340

In your Json string, Data is an object, not an array. So your JsonResult class should look like this:

public class JsonResult
{
    public string ResponseStatus;
    public string Status;
    public string Remarks;
    public string ErrorCode;
    public Data Data;    
}

Upvotes: 6

Related Questions