2011-12-20 13 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のために、私はFEを作成していますということです。

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

しかし、私が持っているaparentlyこのJSONで:

[ 
[ 
{ 
    "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インスタンスの配列ではないことは明らかです。代わりに、それは2つの要素の配列です。最初のものは、いくつかのunknowオブジェクト型の配列です。それはtimestampと呼ばれるプロパティを含んでいます。したがって、Categorインスタンスにすることはできません。2番目の要素は、Categorインスタンスの配列(おそらくあなたが期待している部分)です。

運が良ければ、ルートタイプCategor[][]でJSONを解析してから、最も外側の配列の2番目の要素を使用するだけです。それでも問題が解決しない場合は、おそらく代替のJSONライブラリに切り替える必要があります。DataContractJsonSerializerは、混在型の配列にいくつかの制限があります。

関連する問題