2011-12-20 69 views
0

我該如何解析這個JSON?我不知道如何定義這個結構:我該如何解析這個JSON結構?

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

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

JSON解析代碼:

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

通過定義數據契約...

編譯器將返回:

系統。 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
contract,Object value,XmlObjectSerializerReadContextComplexJson
上下文)在System.Runtime.Serializati

如何解析此JSON?

問題是,對於正常的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; } 
    } 

但在這個JSON aparently我:

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

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

和因爲我看到我不知道如何爲這2個對象(數組對象)準備模型,或者我甚至不知道這個結構的名稱是什麼。

+0

什麼是Categor?請顯示代碼。 – Yuck 2011-12-20 12:51:31

+0

您還需要顯示數據模型。 – 2011-12-20 12:51:35

+0

感謝您的其他信息。我已經更新了我的答案。 – Codo 2011-12-20 14:33:28

回答

0

即使您沒有向我們展示Categor的聲明,Categor[]也不能是您的JSON數據的正確根類型。

JSON數據是數組數組的東西。所以你的根數據類型需要類似Categor[][]

更新:

感謝張貼的Categor聲明。現在很清楚,您的JSON示例不是Categor實例的數組。相反,它是一個由兩個元素組成的數組。第一個是一些未知對象類型的數組。它包含一個名爲timestamp的屬性。所以它不能是一個Categor實例。第二個元素是Categor實例的數組(可能是您期望的部分)。

如果運氣好一些,您可以使用根類型Categor[][]解析JSON,然後使用最外面數組的第二個元素。如果這不起作用,您可能不得不切換到另一個JSON庫,因爲DataContractJsonSerializer對混合類型的數組有一些限制。