2009-10-19 8 views
1

Je l'extrait de code XML suivant:C# problème XML désérialisation

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

Lorsque je tente de désérialiser, rien ne se peuplé, mon C# classe est défini comme celui-ci, s'il vous plaît me aider à repérer mon défaut logique:

[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, pouvez-vous envoyer votre code désérialisation? –

Répondre

4

Je suppose que le tableau attend deux niveaux d'éléments; essayez:

pour contrôler nommer
[XmlElement("dmFile")] 
public dmFile[] dmFile 
{ 
    get; 
    set; 
} 

(dont il dit d'utiliser un seul niveau d'éléments appelés "dmFile" pour le contenu du tableau)

BTW, vous pouvez nommer vos classes plus naturellement en ajoutant des attributs; par exemple:

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

Pour info, je l'ai testé et il fonctionne très bien:

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

Génial, qui a résolu le problème .... –

Questions connexes