无法反序列化JSON
本文关键字:JSON 反序列化 | 更新日期: 2023-09-27 18:06:49
我有一个JSON字符串(根据验证器)是有效的JSON,我被困在试图解析它作为c#中的对象。
示例字符串:
{"asks":[["49999.99000","20.00000000"],["900.00000","4.00000000"],["100.00000","5.00000000"]],"bids":[["5.40000","15.06500000"],["5.53675","0.50000000"],["5.00000","6.00000000"]]}
我试过使用http://json2csharp.com/,它建议这个类(它确实工作):
public class RootObject
{
public List<List<string>> asks { get; set; }
public List<List<string>> bids { get; set; }
}
但是我想把它解析成List<Ask> asks { get; set; }
。我尝试了以下操作:
public class Orderbook
{
public List<Ask> asks { get; set; }
public List<Bid> bids { get; set; }
}
public class Ask
{
public double amount { get; set; }
public double price { get; set; }
}
public class Bid
{
public double amount { get; set; }
public double price { get; set; }
}
但是对于Type '命名空间,这就失败了。
不需要Ask
和Bid
类
var orderBook = JsonConvert.DeserializeObject<Orderbook>(json); //Json.Net
//OR
var orderBook = new JavaScriptSerializer().Deserialize<Orderbook>(json); //JavaScriptSerializer
public class Orderbook
{
public List<List<string>> asks { get; set; }
public List<List<string>> bids { get; set; }
}
BTW:值是字符串("49999.99000"
)不是双精度
编辑
asks
和bids
是数组的数组,因此将它们转换为特定类的数组(在反序列化期间)将需要许多技巧(如果可能的话)。你为什么不简单地在orderBook
上迭代来形成你想要的呢?
var asks = orderBook.asks.Select(a =>
new Ask {
amount = double.Parse(a[0],CultureInfo.InvariantCulture),
price = double.Parse(a[1],CultureInfo.InvariantCulture)
}).ToList();