为什么JsonConvert.DeserializeObject不起作用?

Had*_*asi 0 c# serialization json

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

{"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":""}
Run Code Online (Sandbox Code Playgroud)

我在叫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; }
    }
Run Code Online (Sandbox Code Playgroud)

但是不断出现错误:

无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'Dice.Common.Objects.UnconfirmedAddressInfo []',因为该类型需要JSON数组(例如[1,2,3])来反序列化正确地。

为什么呢

EZI*_*EZI 5

将您的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; }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以反序列化为

var obj = JsonConvert.DeserializeObject<RootObject>(json_string);
Run Code Online (Sandbox Code Playgroud)

PS:您可以重命名类名,但是如果要重命名属性,则应使用JsonPropertyattribute。


Had*_*asi 1

问题是

public class UTByAddressessResponse
{
    public string status { get; set; }
    public UnconfirmedAddressInfo[] data { get; set; }
    public string code { get; set; }
    public string message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

应该

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; }
}
Run Code Online (Sandbox Code Playgroud)