无法将当前JSON数组反序列化为类型

xienkqul  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(135)

我正在尝试反序列化以下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数组反序列化。

hi3rlvi2

hi3rlvi21#

您所展示的JSON将由以下内容表示:

public class OrderBookResponse
{
    [JsonProperty("bids")]
    public List<List<string>> Bids { get; set; }

    [JsonProperty("asks")]
    public List<List<string>> Asks { get; set; }
}

JSON中的bidsasks属性都只是字符串数组的数组。
我建议反序列化为与JSON匹配的模型,然后将其单独转换为更有用的模型。也许可以将属性应用到类中,以说服Json.NET做你想做的事情,但我倾向于认为,当出现重大差异时(不仅仅是属性名称),有必要将两个模型分开,一个用于序列化,一个用于代码的其余部分。

相关问题