JSON反序列化嵌套方括号

本文关键字:方括号 嵌套 反序列化 JSON | 更新日期: 2023-09-27 18:05:22

我使用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#类中表示它。

我试着将"entries"表示为:

[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都为空。

我认为我的问题是"条目"并不真正包含DeltaInfo对象的数组,而是包含路径和元数据的数组的数组,我不确定如何在我的代码中表示。

JSON反序列化嵌套方括号

左括号'['表示列表的开始。两个左括号应该对应于一个列表的列表。结构应该是这样的。

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

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