我正在尝试反序列化以下JSON数据:
{
"bids": [
[ "392031.00000000", "0.00254444" ],
[ "390000.00000000", "0.52917503" ],
......
],
"asks": [
[ "392999.00000000", "1.00000000" ],
[ "393000.00000000", "0.31572236" ],
.....
]
}
我已经研究了类似的问题,如this one,但我没有得到接近的结果,也注意到在那个问题中JSON的结构是不相似的。
我的反序列化代码如下
public class OrderBookElement
{
// I've also tried below commented code
//[JsonProperty(PropertyName = "0")]
//public double price { get; set; }
//[JsonProperty(PropertyName = "1")]
//public double volume { get; set; }
List<double> values;
}
public class OrderBookResponse
{
[JsonProperty(PropertyName = "bids")]
List<OrderBookElement> bids { get; set; }
[JsonProperty(PropertyName = "asks")]
List<OrderBookElement> asks { get; set; }
}
下面是我用于反序列化的代码
var ordBook = JsonConvert.DeserializeObject<OrderBookResponse>(jsonResponse);
这给了我错误:
无法反序列化当前JSON数组(例如[1,2,3]
)转换为RestAPI.OrderBookElement
类型,因为该类型需要JSON对象(例如{"name":"value"}
)来正确地解串。
要修复此错误,请将JSON更改为JSON对象(例如{"name":"value"}
)或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),比如可以从JSON数组反序列化的List。也可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组反序列化。
1条答案
按热度按时间hi3rlvi21#
您所展示的JSON将由以下内容表示:
JSON中的
bids
和asks
属性都只是字符串数组的数组。我建议反序列化为与JSON匹配的模型,然后将其单独转换为更有用的模型。也许可以将属性应用到类中,以说服Json.NET做你想做的事情,但我倾向于认为,当出现重大差异时(不仅仅是属性名称),有必要将两个模型分开,一个用于序列化,一个用于代码的其余部分。