2009-10-19 96 views
1

我有下面的XML片段:C#XML序列化問題

<?xml version="1.0" encoding="utf-8"?> 
<dmFiles> 
    <dmFile dmUpFileGuid="" 
      dmFileDescr="testcase01.pdf" 
      dmFileMetaType="main" 
      dmFileGuid="" 
      dmMimeType="pdf" 
      dmFormat=""> 
       <dmEncodedContent></dmEncodedContent> 
    </dmFile> 
</dmFiles> 

當我嘗試反序列化,沒有被填充,我的C#類是這樣定義的,請幫我找出我的邏輯缺陷:

[Serializable] 
public class dmFiles 
{ 

    public dmFile[] dmFile 
    { 
     get; 
     set; 
    } 

} 


public class dmFile 
{ 
    [XmlAttribute("dmUpFileGuid")] 
    public string dmUpFileGuid 
    { 
     get; 
     set; 
    } 

    [XmlAttribute("dmFileDescr")] 
    public string dmFileDescr 
    { 
     get; 
     set; 
    } 

    [XmlAttribute("dmFileMetaType")] 
    public string dmFileMetaType 
    { 
     get; 
     set; 
    } 

    [XmlAttribute("dmFileGuid")] 
    public string dmFileGuid 
    { 
     get; 
     set; 
    } 

    [XmlAttribute("dmMimeType")] 
    public string dmMimeType 
    { 
     get; 
     set; 
    } 

    [XmlAttribute("dmFormat")] 
    public string dmFormat 
    { 
     get; 
     set; 
    } 

    [XmlElement] 
    public string dmEncodedContent 
    { 
     get; 
     set; 
    } 
} 
+0

@JL,你可以發表你的反序列化的代碼? – 2009-10-19 11:50:59

回答

4

我期望數組需要兩個級別的元素;嘗試:

[XmlElement("dmFile")] 
public dmFile[] dmFile 
{ 
    get; 
    set; 
} 

(告訴它使用元素的單級的數組內容稱爲"dmFile"

順便說一句,你可以通過添加屬性來控制命名更自然地命名您的類;例如:

[XmlRoot("dmFiles")] // don't normally need [Serializable] 
public class FilesWrapper // whatever you want 
{ ... } 

有關信息,我測試了它和它的作品罰款:

using(XmlReader xr = XmlReader.Create(new StringReader(sampleXml))) { 
    XmlSerializer ser = new XmlSerializer(typeof(dmFiles)); 
    dmFiles obj = (dmFiles)ser.Deserialize(xr); 
    // obj has 1 file, with all the correct properties set 
} 
+0

太棒了,解決了問題.... – 2009-10-19 11:57:47