JSON反序列化嵌套方括号

时间:2014-05-27 21:21:20

标签: c# json serialization

我正在使用DataContractJsonSerializer来反序列化Dropbox Core API中来自/ delta的响应。响应如下:

{
  "entries": [
    [
      "/foo.dbf", 
      {
        "bytes": 226822, 
        "client_mtime": "Thu, 26 Sep 2013 23:21:50 +0000", 
        ...
      }
    ], 
    [
      "bar.dbf", 
      {
        "bytes": 147, 
        "client_mtime": "Thu, 26 Sep 2013 23:21:49 +0000", 
        ...
      }
    ],
    ...
  ] 
}

我认为问题是嵌套的方括号。最里面的包含一个由字符串和对象组成的数组。我不确定如何在我的C#类中表示它。

我尝试将“条目”表示为:

[DataContract]
public class Delta
{    
    [DataMember(Name="entries")]
    public DeltaInfo[] Entries { get; internal set; }
}

和“DeltaInfo”为:

[DataContract]
public class DeltaInfo
{
    [DataMember]
    public string Path { get; internal set; }

    [DataMember]
    public PathInfo MetaData { get; internal set; }
}

虽然我在我的Entries数组中得到预期数量的DeltaInfo对象,但在所有DeltaInfo对象中,Path和MetaData都为null。

我认为我的问题是“条目”实际上并不包含DeltaInfo对象数组,而是包含路径和元数据的数组数组,我不知道如何在我的代码中表示它。 / p>

2 个答案:

答案 0 :(得分:2)

一个开口支架' ['表示列表的开头。两个左括号应对应于列表清单。结构看起来像这样。

[DataContract]
public class Delta
{
    [DataMember(Name="entries")]
    public List<List<DeltaInfo>> entries { get; set; }
}

[DataContract]
public class DeltaInfo
{
    [DataMember]
    public string Path { get; internal set; }

    [DataMember]
    public PathInfo MetaData { get; internal set; }
 }

答案 1 :(得分:0)

我找到了解决方案。问题不在于嵌套数组,而是最内层数组包含多个类型的事实。最后,我使用System.Web.Script.Serialization.JavaScriptSerializer将json反序列化为字典并自己构建对象。