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

sus*_*hil 0 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;

}
Run Code Online (Sandbox Code Playgroud)

这是我的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":""
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我读取结果的代码

var result = JsonConvert.DeserializeObject<List<JsonResult>>(retPKT);
Run Code Online (Sandbox Code Playgroud)

但获得例外..

无法将当前JSON对象(例如{"name":"value"})反序列化为类型'System.Collections.Generic.List`1 [JsonResult + Data]',因为该类型需要JSON数组(例如[1,2, 3])正确反序列化.要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List.JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化.Path'Data.Status',第1行,第118位.

我怎样才能解决这个问题?

小智 5

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

public class JsonResult
{
    public string ResponseStatus;
    public string Status;
    public string Remarks;
    public string ErrorCode;
    public Data Data;    
}
Run Code Online (Sandbox Code Playgroud)

  • 要自己达成此解决方案:验证您的JSON以确保它有效(http://jsonlint.com),然后将完整的JSON字符串输入http://json2csharp.com以便为您构建类. (2认同)