2015-02-11 32 views
0

我一直試圖將一個xml文檔反序列化爲一個類。我之前做過這個,但沒有這麼多嵌套。我非常想複製一個簡單的目錄樹。我遇到的問題是文件方面。目錄部分工作,我可以到文件,但反序列化我的班級的文件名不完全匹配。我的XML文檔是:將嵌套XML反序列化爲數組

<?xml version="1.0" encoding="utf-8"?> 
<Directories> 
<Directory Path="Path1"> 
<Files> 
    <File Type="None">File1</File> 
    <File Type="None">File2</File> 
    <File Type="EXE">File3</File> 
</Files> 
<Files> 
    <File Type="DLL">File4</File> 
    <File Type="None">File5</File> 
    <File Type="EXE">File6</File> 
</Files> 
<Files> 
    <File Type="DLL">File7</File> 
    <File Type="None">File8</File> 
    <File Type="EXE">File9</File> 
</Files> 
</Directory> 
<Directory Path="Path2"> 
<Files> 
    <File Type="DLL">File10</File> 
    <File Type="None">File11</File> 
    <File Type="EXE">File12</File> 
</Files> 
<Files> 
    <File Type="DLL">File13</File> 
    <File Type="None">File14</File> 
    <File Type="EXE">File15</File> 
</Files> 
<Files> 
    <File Type="DLL">File16</File> 
    <File Type="None">File17</File> 
    <File Type="EXE">File18</File> 
</Files> 
</Directory> 
<Directory Path="Path3"> 
<Files> 
    <File Type="DLL">File19</File> 
    <File Type="None">File20</File> 
    <File Type="EXE">File21</File> 
</Files> 
<Files> 
    <File Type="DLL">File22</File> 
    <File Type="None">File23</File> 
    <File Type="EXE">File24</File> 
</Files> 
<Files> 
    <File Type="DLL">File25</File> 
    <File Type="None">File26</File> 
    <File Type="EXE">File27</File> 
</Files> 
</Directory> 
</Directories> 

,這裏是我的課:

[XmlRoot("Directories")] 
public class Directories 
{ 
    [XmlElement("Directory")] 
    public Directory[] Directory { get; set; } 
} 

public class Directory 
{ 
    [XmlAttribute("Path")] 
    public string Path { get; set; } 

    [XmlArray("Files")] 
    [XmlArrayItem("File")]//this causes the object to structure properly, but doesn't populate the string file property in the class with or without the attribute decoration 
    public XmlFileInfo[] Files { get; set; } 
} 

public class XmlFileInfo 
{ 
    [XmlElement("File")] 
    public string File { get; set; } 

    [XmlAttribute("Type")]//this works fine if this class is referenced as an array 
    public /*External Enum*/ FileTypes Type { get; set; } 
} 

與裝飾上面的類正確地填充ENUM類型但沒有文件字符串。與裝飾下列類填充在文件樹中的第一個文件的文件字符串,不能正確填充類型枚舉

[XmlRoot("Directories")] 
public class Directories 
{ 
    [XmlElement("Directory")] 
    public Directory[] Directory { get; set; } 
} 

public class Directory 
{ 
    [XmlAttribute("Path")] 
    public string Path { get; set; } 

    [XmlElement("Files")] 
    //[XmlArrayItem("File")] 
    public XmlFileInfo[] Files { get; set; } 
} 

public class XmlFileInfo 
{ 
    [XmlElement("File")] 
    public string File { get; set; } 

    [XmlAttribute("Type")] 
    public SignatureChecker_Mtabs.Program.FileTypes Type { get; set; } 
} 

我失去了什麼?

回答

0

我重做了我的課。我的問題是與我的xmlFileInfo屬性。我設計的課程不當,由於時間限制,我無法糾正這個問題。所以相反,我正在刪除的屬性,並與這個類去

[Serializable] 
//[XmlRoot("Directories")] 
public class Directories 
{ 
    //[XmlElement("Directory")] 
    public List<Directory> Directory { get; set; } 
} 

[Serializable] 
public class Directory 
{ 
    //[XmlAttribute()] 
    public string Path { get; set; } 

    //[XmlArray("Files")] 
    //[XmlArrayItem("File")] 
    public List<XmlFileInfo> Files { get; set; } 
} 

[Serializable] 
public class XmlFileInfo 
{ 
    //[XmlElement("File")] 
    public string File { get; set; } 

    //[XmlAttribute()] 
    public MyobstruficatedEnum Type { get; set; } 
}