我试图将JSON字符串反序列化为对象,但遇到了一个异常,真的很困惑。
"{
\"lastUpdateId\":787618462,
\"bids\":[[\"10451.90000000\",\"0.18884000\"],[\"10451.70000000\",\"0.01770200\"]],
\"asks\":[[\"10457.88000000\",\"0.17060500\"],[\"10458.13000000\",\"0.79300000\"]]
}"
这是必需的对象:
public class OrderBook
{
[JsonProperty("lastUpdateId")]
public int lastUpdateId { get; set; }
[JsonProperty("asks")]
public List<OrderBookOrder> Asks { get; set; }
[JsonProperty("bids")]
public List<OrderBookOrder> Bids { get; set; }
public OrderBook(List<OrderBookOrder> asks, List<OrderBookOrder> bids)
{
Asks = asks;
Bids = bids;
}
public OrderBook()
{
}
}
public class OrderBookOrder
{
public decimal Price { get; set; }
public decimal Volume { get; set; }
public OrderBookOrder(decimal price, decimal volume)
{
Price = price;
Volume = volume;
}
}
所以然后我使用NewtonSoft Json将字符串转换为对象
public static implicit operator OrderBook(ApiResponse response)
{
return Utilities.ConverFromJason<OrderBook>(response);
}
我认为问题是将两个数组(出价和要价)相减,但不能解决问题。非常感谢您的帮助!
答案 0 :(得分:3)
您提供的JSON必须具有所示的类结构
public class RootObject
{
public int lastUpdateId { get; set; }
public List<List<string>> bids { get; set; }
public List<List<string>> asks { get; set; }
}
答案 1 :(得分:1)
最好的选择是使用Newtonsoft.Json(来自nuget)。您所要做的就是:
OrderBook ob = JsonConvert.DeserializeObject<OrderBook>(response.ToString());
您的模型必须是这样的:
public class OrderBook
{
[JsonProperty("lastUpdateId")]
public int lastUpdateId { get; set; }
[JsonProperty("bids")]
public List<List<string>> bids { get; set; }
[JsonProperty("asks")]
public List<List<string>> asks { get; set; }
}
您可以在此处从json字符串中获取合适的模型:http://json2csharp.com/
重要!您的所有Json属性必须具有公共getter和setter。即使您只序列化或反序列化。
要填充OrderBookOrder对象,必须创建一个特定的方法并在反序列化后调用它。使用Newtonsoft.Json无法将JSon模型转换为其他模型。
答案 2 :(得分:0)
根据您的问题,您的模型类如下所示
public class OrderBook
{
[JsonProperty("lastUpdateId")]
public int lastUpdateId { get; set; }
[JsonProperty("bids")]
public IList<IList<string>> Bids { get; set; }
[JsonProperty("asks")]
public IList<IList<string>> Asks { get; set; }
}
有效的json格式如下所示
{
"lastUpdateId": 787618462,
"bids": [
[".90000000 ", "0.18884000 "],
["10451.70000000 ", "0.01770200 "]
],
"asks": [
["10457.88000000", "0.17060500"],
["10458.13000000", "0.79300000"]
]
}
您可以编写DeserializeObject代码
public static implicit operator OrderBook(ApiResponse response)
{
return JsonConvert.DeserializeObject<OrderBook>(response);
}
答案 3 :(得分:0)
如果您不想使用属性来污染模型,也可以使用Fluent-JSON.NET。