我如何解析这个JSON结构?

时间:2011-12-20 12:46:17

标签: c# json parsing

如何解析此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);

通过定义数据合同......

编译器正在返回:

  

System.InvalidCastException:在。的InvalidCastException   System.Runtime.Serialization.Json.DataContractJsonSerializer.ConvertObjectToDataContract(DataContract
  contract,Object value,XmlObjectSerializerReadContextComplexJson
  上下文)     System.Runtime.Serialization.Json.ObjectToDataContractConverter.ConvertICollectionToCollectionDataContract(DataContractJsonSerializer
  serializer,CollectionDataContract contract,Object 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中,我有:

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

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

正如我所知,我不知道如何为这2个对象(数组对象)预备模型,或者我甚至不知道这个结构的名称是什么。

1 个答案:

答案 0 :(得分:0)

即使您没有向我们显示Categor的声明,Categor[]也不能是您的JSON数据的正确根类型。

JSON数据是数组数组。因此,您的根数据类型必须类似于Categor[][]

<强>更新

感谢发布Categor的声明。现在很清楚,您的JSON示例不是Categor个实例的数组。相反,它是两个元素的数组。第一个是一些未知对象类型的数组。它包含一个名为timestamp的属性。所以它不能是Categor实例。第二个元素是Categor个实例的数组(可能是您期望的部分)。

幸运的是,您可以使用根类型Categor[][]解析JSON,然后只使用最外层数组的第二个元素。如果这不起作用,您可能不得不切换到另一个JSON库,因为DataContractJsonSerializer对混合类型的数组有一些限制。