2011-12-20 43 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对混合类型的数组有一些限制。