我有以下JSON:
{"success":1,
"return":{
"funds": {
"usd":0,
"btc":0,
"ltc":0
},
"rights": {
"info":1,
"trade":0,
"withdraw":0
},
"transaction_count":1,
"open_orders":0,
"server_time":1406470221
}
}
我试着用:
反序列化它 JsonConvert.DeserializeObject<UserInfo>(jsonString);
类如下:
public class UserInfo
{
[JsonProperty("transaction_count")]
public int TransactionCount { get; set; }
[JsonProperty("open_orders")]
public int OpenOrders { get; set; }
[JsonProperty("server_time")]
public int ServerTime { get; set; }
[JsonProperty("funds")]
public Funds Funds { get; set; }
[JsonProperty("rights")]
public Rights Rights { get; set; }
}
public class Funds
{
[JsonProperty("btc")]
public decimal Btc { get; set; }
[JsonProperty("ltc")]
public decimal Ltc { get; set; }
[JsonProperty("usd")]
public decimal Usd { get; set; }
};
public class Rights
{
[JsonProperty("info")]
public bool Info { get; set; }
[JsonProperty("trade")]
public bool Trade { get; set; }
[JsonProperty("withdraw")]
public bool Withdraw { get; set; }
}
我试着不使用属性和其他教程,但似乎没有工作。= (
为什么不工作?例如,我不知道如何将return设置为根。这可能吗?
谢谢。
试试这个:
public class Funds
{
public int usd { get; set; }
public int btc { get; set; }
public int ltc { get; set; }
}
public class Rights
{
public int info { get; set; }
public int trade { get; set; }
public int withdraw { get; set; }
}
public class Return
{
public Funds funds { get; set; }
public Rights rights { get; set; }
public int transaction_count { get; set; }
public int open_orders { get; set; }
public int server_time { get; set; }
}
public class RootObject
{
public int success { get; set; }
public Return @return { get; set; }
}
和反序列化:
JsonConvert.DeserializeObject<RootObject>(jsonString);
参考:http://json2csharp.com/
您的JSON格式不正确。
{"success":1,
"return":{
"funds": <-- missing {
"usd":0,
"btc":0,
"ltc":0
},
"rights": <-- missing {
"info":1,
"trade":0,
"withdraw":0
},
"transaction_count":1,
"open_orders":0,
"server_time":1406470221
}
}
关于你关于设置根的问题,试着写一个简单的包装器类来表示你实际的JSON层次结构,然后按原样反序列化整个字符串,如果你的对象图映射到JSON,它将工作。
编辑:看看@Crasher的答案,这正是我的意思,有一个实际的样本(虽然我没有验证,但我会给它投票),虽然@dcastro的答案是最干净的。
与dcastro的确切示例不同的是,如果您使用JObject来处理动态根,您也可以使用JObject。首先避免命名根,或者允许根更改。请给他的回答点赞,我只是提供了一个动态的选择。
var root = JObject.Parse(jsonStr).First;
您不需要像其他答案建议的那样为此创建包装器/根类。
您可以将整个东西解析为JObject
,然后将return
节点转换为UserInfo
对象。
JObject obj = JObject.Parse(jsonStr);
var userInfo = obj["return"].ToObject<UserInfo>();