无法将当前JSON对象反序列化为类型System.Collections.Generic.List

时间:2017-02-27 07:23:47

标签: c# json json.net

我正在尝试阅读我的JSON结果。

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

}

这是我的JSON结果

{
"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":""
    }
}

这是我读取结果的代码

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

但是获得例外......

  

无法反序列化当前的JSON对象(例如{&#34; name&#34;:&#34; value&#34;})   into type&#39; System.Collections.Generic.List`1 [JsonResult + Data]&#39;因为   该类型需要一个JSON数组(例如[1,2,3])来反序列化   正确。要修复此错误,请将JSON更改为JSON数组   (例如[1,2,3])或更改反序列化类型以使其正常   .NET类型(例如,不是整数的基本类型,不是集合   类似于数组或List的类型,可以从JSON反序列化   宾语。 JsonObjectAttribute也可以添加到类型中以强制它   从JSON对象反序列化。 Path&#39; Data.Status&#39;,第1行,   第118位。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

在Json字符串中,Data是一个对象,而不是一个数组。所以你的JsonResult类应该是这样的:

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

答案 1 :(得分:2)

如果你想发送数据列表List<Data>那么在JSON中它应该是一个数组形式

更改以下JSON内容

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

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

答案 2 :(得分:0)

数据不是一个列表,它是一个对象。您的模型应如下所示(仅修改了JsonResult):

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

希望它有所帮助!