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对象的数组,而是包含路径和元数据的数组的数组,我不确定如何在我的代码中表示。
左括号'['表示列表的开始。两个左括号应该对应于一个列表的列表。结构应该是这样的。
[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反序列化为字典,并自己构建对象。