2011-01-27 32 views
1

我有一個困難時期嘗試反序列化與C#以下JSON數據:反序列化Json的多個值

{folder:{name:'MainFolder',subfolder:[{name:'OneFolder',document:'OneDocument'},{name:'TwoFolder',document:['TwoDocumentA','TwoDocumentB']}]}} 

爲了使它更加清楚一點,我創建了相同的XML版本JSON只是用於可視化目的:

<folder name="MainFolder"> 
<subfolder name="OneFolder"> 
    <document>OneDocument</document> 
</subfolder> 
<subfolder name="TwoFolder"> 
    <document>TwoDocumentA</document> 
    <document>TwoDocumentB</document> 
</subfolder></folder> 

所以,我想我的問題是,我有兩個類型的文件:A & 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數據的desealization,所以請原諒我,如果我犯了巨大的錯誤,請幫我解決一下這個。

在此先感謝。

回答

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

有了這個修改,代碼工作正常。 希望它有助於某人。

1

它看起來像你的JSON,第一個子文件夾的文件成員不是一個數組,而是一個字符串。而不是document:'OneDocument',它應該是document:['OneDocument']