2011-12-20 3 views
0

어떻게이 JSON을 구문 분석합니까?이 JSON 구조를 구문 분석하려면 어떻게해야합니까?

컴파일러는 반환 ... 데이터 계약을 정의하여

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Categor[])); 
Categor[] result = (Categor[])serializer.ReadObject(responseStream); 

:

시스템을

[ 
    [{ 
     "timestamp": 1324374926 
    }], 
    [{ 
     "id": "9", 
     "neme": "qqq" 
    }, { 
     "id": "19", 
     "neme": "qqq" 

    }, { 
     "id": "29", 
     "neme": "qqq" 
    }] 
] 

JSON 파싱 코드 :이 구조를 정의하는 방법을 잘 모릅니다. InvalidCastException : InvalidCastException 때
System.Runtime.Serialization.Json.DataCon tractJsonSerializer.ConvertObjectToDataContract (DataContract
계약 개체 값 XmlObjectSerializerReadContextComplexJson
컨텍스트)
System.Runtime.Serialization.Json.ObjectToDataContractConverter.ConvertICollectionToCollectionDataContract에서
에서 (DataContractJsonSerializer
시리얼, CollectionDataContract 계약 deserializedValue,
XmlObjectSerializerReadContextComplexJson 콘텍스트 객체) System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract (DataContract
계약, 개체 값, XmlObjectSerializerReadContextComplexJson나는이 JSON을 구문 분석하려면 어떻게 System.Runtime.Serializati

에서 컨텍스트)?

물질이 정상 JSON을 위해 내가 만드는 오전 철입니다 :

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Categor[])); 
Categor[] result = (Categor[])serializer.ReadObject(responseStream); 
[ 

{ 
    "category": "A", 
    "subcategories": [ 
     { 
      "id": "QW", 
      "name": "A", 
      "ranking": 100, 
      "isVisible": true 
     }, 
     { 
      "id": "QWN0d", 
      "name": "Pol", 
      "ranking": 101, 
      "isVisible": false 
     }, 

...

데이터 모델은 다음과 같습니다

[DataContract] 
    public class Articlesubcat 
    { 
     [DataMember(Name = "id")] 
     public string id { get; set; } 
     [DataMember(Name = "name")] 
     public string name { get; set; } 
     [DataMember(Name = "ranking")] 
     public string ranking { get; set; } 
     [DataMember(Name = "isVisible")] 
     public string isVisible { get; set; } 

    } 

    [DataContract] 
    public class Categor 
    { 
      [DataMember(Name = "category")] 
     public string category { get; set; } 
      [DataMember(Name = "subcategories")] 
     public List<Articlesubcat> subcat { get; set; } 
    } 

하지만이 JSON에서

은 aparently 내가 가진 :

[ 
[ 
{ 
    "timestamp": 1324374926 
} 
], 
[ 
    { 
    "id": "9", 
    "neme": "qqq" 
    }, 
    { 
    "id": "19", 
    "neme": "qqq" 

    }, 
    { 
    "id": "29", 
    "neme": "qqq" 
    } 
] 
] 

및 나는이 2 객체 (배열 객체)에 대한 모델을 prepair하는 법을 모르거나이 구조의 이름이 무엇인지 모릅니다.

+0

'분류'란 무엇입니까? 코드를 보여주십시오. – Yuck

+0

데이터 모델도 표시해야합니다. –

+0

추가 정보를 제공해 주셔서 감사합니다. 내 대답을 업데이트했습니다. – Codo

답변

0

Categor의 선언을 표시하지 않더라도 Categor[]은 올바른 JSON 데이터의 루트 유형이 될 수 없습니다.

JSON 데이터는 배열배열입니다. 따라서 루트 데이터 유형은 Categor[][]과 같아야합니다.

업데이트 : Categor의 선언을 게시

감사합니다. 이제 JSON 샘플이 Categor 인스턴스의 배열이 아니라는 것이 확실합니다. 대신 두 요소로 이루어진 배열입니다. 첫 번째 것은 unknow 객체 유형의 배열입니다. 여기에는 timestamp이라는 속성이 있습니다. 따라서 Categor 인스턴스가 될 수 없습니다.두 번째 요소는 Categor 인스턴스의 배열입니다 (그리고 아마도 여러분이 기대하는 부분 일 것입니다).

행운을 따라 루트 유형 Categor[][]으로 JSON을 구문 분석 한 다음 가장 바깥에있는 배열의 두 번째 요소 만 사용할 수 있습니다. 그래도 작동하지 않으면 DataContractJsonSerializer에 혼합 유형의 배열에 대한 제한 사항이 있기 때문에 대체 JSON 라이브러리로 전환해야 할 것입니다.

관련 문제