2015-02-06 2 views
2

을 Object로 :역 직렬화 JSON 내가 JSON 문자열이 예외

var objectValue = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, object>>>(jsonString); 

var objectDeserialize = JsonConvert.DeserializeObject<OrderListResponse>(objectValue.Values.First()["orderListResponse"].ToString()); 

나는 오류 메시지 :

{"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; } 
} 

그래서 객체 :

deserialize 할 수 없습니다. 현재 JSON 객체 (예 : 형식에서 JSON 배열 (예 : [1,2,3])을 필요로하기 때문에 'System.Collections.Generic.List`1 [LegDetail]'유형 ({name ":"value "})을 올바르게 역 직렬화 할 수 없습니다.

누군가 내가 올바른 코드를 표시 할 수 있습니까?

이 업데이트
"legDetails": 
[{ 
    "legNumber":1, 
    "symbolInfo": 
    { 
     "symbol":"CSCO" 
    } 
}] 

: 지금 문제가 당신이 원하는 그래서

첫 번째 순서로

답변

1

logdetails는

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

은 다음과 같이해야합니다 ... 배열이 아닌 때로는 배열이 될 수있는 json을 deserialize하고 때로는 객체를 나타낼 수 있습니다. 또 다른 유래 스레드에서

봐는 : Deserializing JSON when sometimes array and sometimes object

이 문제를 해결하는 데 도움이 될 수 있습니다.

+0

json 문자열은 WebService에서 가져온 것이므로 legdetails는 배열이 아니므로 해당 legdetails를 처리하기위한 솔루션이 있습니까? –

+0

@ VũHoàng이 내 대답을 업데이트했습니다. –

+0

문제가 해결되었습니다. 감사합니다. @ Jenish Rabadiya –

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을 업데이트했다. –