2009-10-19 87 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