我很难用C#反序列化以下Json数据:
{folder:{name:'MainFolder',subfolder:[{name:'OneFolder',document:'OneDocument'},{name:'TwoFolder',document:['TwoDocumentA','TwoDocumentB']}]}}
为了使它更清晰一点,我为了可视化目的创建了同一个Json的XML版本:
<folder name="MainFolder">
<subfolder name="OneFolder">
<document>OneDocument</document>
</subfolder>
<subfolder name="TwoFolder">
<document>TwoDocumentA</document>
<document>TwoDocumentB</document>
</subfolder></folder>
所以,我想我的问题是我有两种类型的文件:A&amp; B作为子文件夹的子项。这是我的代码以及我如何尝试,但这不起作用(C#):
[Serializable, DataContract(Name = "folder")]
internal class Folder
{
private string _name;
private SubFolder[] _subFolder;
[DataMember(Name = "name")]
public string Name
{
get { return _name; }
set { _name = value; }
}
[DataMember(Name = "subfolder")]
public SubFolder[] SubFolder
{
get { return _subFolder; }
set { _subFolder = value; }
}
}
internal class SubFolder
{
private string _name;
private string[] _document;
[DataMember(Name = "name")]
public string Name
{
get { return _name; }
set { _name = value; }
}
[DataMember(Name = "document")]
public string[] Document
{
get { return _document; }
set { _document = value; }
}
}
我对Json数据的去除是新的,所以如果我犯了大错,请原谅我,请帮助我。
提前致谢。
答案 0 :(得分:1)
在您的JSON中,第一个子文件夹的文档成员不是数组,而是单个字符串。而不是document:'OneDocument'
,它应该是document:['OneDocument']
。
答案 1 :(得分:0)
对于任何有兴趣的人,我都会回答我自己的问题。 Firts,Rex M是对的,我需要在阵列上包含每个文档,即使它只是一个。并且在Json数组上有一些无用的数据,所以这就是我无法使用我正在使用的类层次结构反序列化它的原因。正确的Json就是这个:
{"name":"MainFolder","subfolder":[{"name":"OneFolder","document":["OneDocument"]},{"name":"TwoFolder","document":["TwoDocumentA","TwoDocumentB"]}]}
其次,我在课程上遗漏了一些必要的标签:
[DataContract]
internal class Folder
{
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMemberAttribute(Name = "subfolder")]
public List<SubFolder> SubFolder { get; set; }
}
[DataContractAttribute(Name = "subfolder")]
internal class SubFolder
{
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "document")]
public List<string> Document { get; set; }
}
通过这些修改,代码工作正常。 希望它对某人有所帮助。