简体   繁体   English

为什么 JsonConvert.DeserializeObject 不起作用?

[英]Why JsonConvert.DeserializeObject not working?

I have a result from web service, the string results is :我有一个来自网络服务的结果,字符串结果是:

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

I'm calling JsonConvert.DeserializeObject:我正在调用 JsonConvert.DeserializeObject:

UTByAddressessResponse data = Serializer.Deserialize(result); 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; }
}

But keep getting an error :但不断收到错误:

Cannot deserialize the current JSON object (eg {"name":"value"}) into type 'Dice.Common.Objects.UnconfirmedAddressInfo[]' because the type requires a JSON array (eg [1,2,3]) to deserialize correctly.无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'Dice.Common.Objects.UnconfirmedAddressInfo[]',因为该类型需要 JSON 数组(例如 [1,2,3])进行反序列化正确。

Why ?为什么 ?

Paste your json to http://json2csharp.com/ It will create the following classes将您的 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; }
}

Now you can deserialize as现在你可以反序列化为

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

PS: You can rename your class names, but if you want to rename properties, you should use JsonProperty attribute. PS:你可以重命名你的类名,但是如果你想重命名属性,你应该使用JsonProperty属性。

The problem is that问题是

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

should be应该

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM