【问题标题】:Why JsonConvert.DeserializeObject not working?为什么 JsonConvert.DeserializeObject 不起作用?
【发布时间】:2015-03-31 19:33:28
【问题描述】:

我有一个来自网络服务的结果,字符串结果是:

{"status":"success","data":{"address":"aa@aa.aa","unconfirmed":[{"tx":"cb2f252078d933f63d9cef52bee8857427d70c1142f41f10567cfad7ef1d2dcb","time_utc":"2015-03-31T19:05:09Z","amount":0.1,"n":0},{"tx":"a34fc5b8b3c29c7046ca8acaedd39280f81597a853f30825856e2f46e498c478","time_utc":"2015-03-31T19:05:01Z","amount":0.1,"n":0}]},"code":200,"message":""}

我正在调用 JsonConvert.DeserializeObject:

UTByAddressessResponse 数据 = Serializer.Deserialize(result);

public static T Deserialize<T>(string json)
{
    return JsonConvert.DeserializeObject<T>(json);
}

public class UTByAddressessResponse
{
    public string status { get; set; }
    public UnconfirmedAddressInfo[] data { get; set; }
    public string code { get; set; }
    public string message { get; set; }
}

public class UnconfirmedAddressInfo
{
    public string address { get; set; }
    public List<UT> unconfirmed { get; set; }
}

public class UT
{
    public string tx { get; set; }
    public DateTime time_utc { get; set; }
    public float amount { get; set; }
    public long n { get; set; }
}

但是一直报错:

无法反序列化当前 JSON 对象(例如 {"name":"value"}) 输入“Dice.Common.Objects.UnconfirmedAddressInfo[]”,因为 type 需要一个 JSON 数组(例如 [1,2,3])才能正确反序列化。

为什么?

【问题讨论】:

    标签: c# json serialization


    【解决方案1】:

    将您的 json 粘贴到 http://json2csharp.com/ 它将创建以下类

    public class Unconfirmed
    {
        public string tx { get; set; }
        public string time_utc { get; set; }
        public double amount { get; set; }
        public int n { get; set; }
    }
    
    public class Data
    {
        public string address { get; set; }
        public List<Unconfirmed> unconfirmed { get; set; }
    }
    
    public class RootObject
    {
        public string status { get; set; }
        public Data data { get; set; }
        public int code { get; set; }
        public string message { get; set; }
    }
    

    现在你可以反序列化为

    var obj = JsonConvert.DeserializeObject<RootObject>(json_string);
    

    PS:你可以重命名你的类名,但是如果你想重命名属性,你应该使用JsonProperty属性。

    【讨论】:

      【解决方案2】:

      问题是

      public class UTByAddressessResponse
      {
          public string status { get; set; }
          public UnconfirmedAddressInfo[] data { get; set; }
          public string code { get; set; }
          public string message { get; set; }
      }
      

      应该是

      public class UTByAddressessResponse
      {
          public string status { get; set; }
          public UnconfirmedAddressInfo data { get; set; } // not array
          public string code { get; set; }
          public string message { get; set; }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 2018-02-01
        • 2020-09-11
        • 1970-01-01
        • 2021-12-03
        相关资源
        最近更新 更多