【问题标题】:Cannot deserialize the current JSON object into type 'System.Collections.Generic.List无法将当前 JSON 对象反序列化为“System.Collections.Generic.List”类型
【发布时间】:2017-02-27 07:23:47
【问题描述】:

我正在尝试读取我的 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 对象(例如 {"name":"value"}) 进入类型“System.Collections.Generic.List`1[JsonResult+Data]”,因为 该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。要修复此错误,请将 JSON 更改为 JSON 数组 (例如 [1,2,3])或更改反序列化类型,使其成为正常的 .NET 类型(例如,不是像整数这样的原始类型,也不是集合 可以从 JSON 反序列化的数组或列表等类型 目的。 JsonObjectAttribute 也可以添加到类型中来强制它 从 JSON 对象反序列化。路径“Data.Status”,第 1 行, 位置 118。

我该如何解决这个问题?

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

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

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

    【讨论】:

    • 要自己达到此解决方案:验证您的 JSON 以确保其有效 (jsonlint.com),然后将完整的 JSON 字符串输入到 json2csharp.com 为您构建类。
    【解决方案2】:

    如果你想发送数据列表List&lt;Data&gt;,那么在 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":""}]
    

    【讨论】:

      【解决方案3】:

      数据不是一个列表,它是一个对象。您的模型应如下所示(仅修改了 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; }
      }
      

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        • 2015-02-23
        • 1970-01-01
        相关资源
        最近更新 更多