我正在使用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>
答案 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反序列化为字典并自己构建对象。