反序列化JSON来对象异常
问题描述:
我有一个JSON字符串:反序列化JSON来对象异常
{"GetOrderListResponse":
{"orderListResponse":
{
"orderDetails":
[
{"order":
{
"orderId":208,
"legDetails":
{
"legNumber":1,
"symbolInfo":
{
"symbol":"CSCO"
}
}
}
},
{"order":
{
"orderId":200,
"legDetails":
[
{
"legNumber":1,
"symbolInfo":
{
"symbol":"IBM"
}
},
{
"legNumber":2,
"symbolInfo":
{
"symbol":"IBM",
"callPut":"CALL",
"expYear":2010,
"expMonth":4,
"expDay":17,
"strikePrice":115
}
}
]
}
}
]
}
}
}
而且我有对象
public class OrderListResponse
{
public List<OrderDetail> orderDetails { get; set; }
}
public class OrderDetail
{
public Order order { get; set; }
}
public class Order
{
public long orderId { get; set; }
public List<LegDetail> legDetails { get; set; }
}
public class LegDetail
{
public long legNumber { get; set; }
public Symbol symbolInfo { get; set; }
}
public class Symbol
{
public string symbol { get; set; }
public string callPut { get; set; }
public int expYear { get; set; }
public int expMonth { get; set; }
public int expDay { get; set; }
public int strikePrice { get; set; }
}
所以,当我使用代码:
var objectValue = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, object>>>(jsonString);
var objectDeserialize = JsonConvert.DeserializeObject<OrderListResponse>(objectValue.Values.First()["orderListResponse"].ToString());
我得到一个错误信息:
无法反序列化当前的JSON对象(例如{“name”:“value”})转换为类型'System.Collections.Generic.List`1 [LegDetail]',因为该类型需要JSON数组(例如[1,2,3])才能正确地反序列化。
有人告诉我正确的代码,它的工作?
答
logdetails在第一阶是不是数组...
"legDetails":
{
"legNumber":1,
"symbolInfo":
{
"symbol":"CSCO"
}
}
应该像下面:
"legDetails":
[{
"legNumber":1,
"symbolInfo":
{
"symbol":"CSCO"
}
}]
更新:
所以,现在的问题是,你想反序列化一个json,有时可能是数组,有时可能代表一个对象。
看看另一个计算器主题:Deserializing JSON when sometimes array and sometimes object
这可以帮助你解决这个问题。
答
您的JSON无效。它应该是:
{
"GetOrderListResponse":{
"orderListResponse":{
"orderDetails":[
{
"order":{
"orderId":208,
"legDetails":[
{
"legNumber":1,
"symbolInfo":{
"symbol":"CSCO"
}
}
]
}
},
{
"order":{
"orderId":200,
"legDetails":[
{
"legNumber":1,
"symbolInfo":{
"symbol":"IBM"
}
},
{
"legNumber":2,
"symbolInfo":{
"symbol":"IBM",
"callPut":"CALL",
"expYear":2010,
"expMonth":4,
"expDay":17,
"strikePrice":115
}
}
]
}
}
]
}
}
}
+0
我贴错了。我已经更新了json – 2015-02-06 05:59:30
json字符串从WebService获得,所以我有一些命令,legdetails不是一个数组,所以你有任何解决方案来处理该legdetails? – 2015-02-06 05:40:54
@VũHoàng更新了我的答案。 – 2015-02-06 06:01:20
问题已解决,谢谢@Jenish Rabadiya – 2015-02-06 06:35:52