2015-02-06 95 views
2

我有一个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])才能正确地反序列化。

有人告诉我正确的代码,它的工作?

回答

1

logdetails在第一阶是不是数组...

"legDetails": 
{ 
    "legNumber":1, 
    "symbolInfo": 
    { 
     "symbol":"CSCO" 
    } 
} 

应该像下面:

"legDetails": 
[{ 
    "legNumber":1, 
    "symbolInfo": 
    { 
     "symbol":"CSCO" 
    } 
}] 

更新:

所以,现在的问题是,你想反序列化一个json,有时可能是数组,有时可能代表一个对象。

看看另一个计算器主题:Deserializing JSON when sometimes array and sometimes object

这可以帮助你解决这个问题。

+0

json字符串从WebService获得,所以我有一些命令,legdetails不是一个数组,所以你有任何解决方案来处理该legdetails? – 2015-02-06 05:40:54

+0

@VũHoàng更新了我的答案。 – 2015-02-06 06:01:20

+0

问题已解决,谢谢@Jenish Rabadiya – 2015-02-06 06:35:52

0

您的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