2010-11-23 6 views
0

J'ai une chaîne XML comme ça:Pourquoi désérialiser le XML dans l'objet renvoyer une valeur nulle?

<?xml version="1.0" ?> 
<result> 
<vmeet_id>7121</vmeet_id> 
<username>MT_Hue_QuangBinh_QuangTri</username> 
<email></email> 
<begin_date>2010-04-21 08:53</begin_date> 
<expiry_date>2010-12-21 00:00</expiry_date> 
<point></point> 
<info>OK</info> 
</result> 

Je veux désérialiser dans un objet, donc je créé cette classe:

[Serializable] 
[XmlRoot(ElementName = "result", IsNullable = false)] 
public class UserInfo 
{ 
    [XmlAttribute("vmeet_id")] 
    public int UserID { get; set; } 
    [XmlAttribute("username")] 
    public string Username { get; set; } 
    [XmlAttribute("email")] 
    public string Email { get; set; } 
    [XmlAttribute("begin_date")] 
    public DateTime BeginDate { get; set; } 
    [XmlAttribute("expiry_date")] 
    public DateTime ExpiryDate { get; set; } 
    [XmlAttribute("point")] 
    public string Point { get; set; } 
    [XmlAttribute("info")] 
    public string Info { get; set; } 
} 

puis utiliser ce code pour désérialiser:

var deserializer = new XmlSerializer(typeof(UserInfo)); 
     using (var stream = new StringReader(result)) 
     { 
      UserInfo userInfo = (UserInfo)deserializer.Deserialize(stream); 
      return userInfo; 
     } 

la valeur de retour n'était pas nulle, mais toutes ses propriétés étaient nulles:

<result vmeet_id="0" begin_date="0001-01-01T00:00:00" expiry_date="0001-01-01T00:00:00"/> 

Qu'est-ce qui ne va pas ici? Est-ce que j'ai oublié quelque chose?

Merci.

+1

En note: si vous avez un morceau de XML; vous pouvez utiliser l'outil de ligne de commande xsd.exe pour générer un schéma XML et dans un second temps une classe C# à partir de ce XML qui sera capable de désérialiser ce XML dans une classe C#. Juste une pensée ... au lieu de beaucoup d'heures de codage à la main - juste appelé xsd.exe deux fois - et vous avez terminé! –

Répondre

7

Dans votre XML, tous vos 'vmeet' 'begin_date' sont tous elements, mais dans votre classe UserInfo, vous les déclarez comme XMLAttribute. Essayez de les changer pour XMLElement devrait aider.

+0

merci, je vais essayer :) – Vimvq1987

+0

un autre problème, quand je le désérialise, la valeur datetime ne peut pas être désérialisé correctement (il semble que le manque de schéma), fin renvoie la valeur: La chaîne '2010-04-21 08:53 'n'est pas une valeur AllXsd valide. Pouvez-vous suggérer une solution de contournement? – Vimvq1987

+0

Je ne suis pas sûr quel type de format Datetime MS utilise en sérialisation, mais très probablement il devrait adhérer au format XSD Datetime standard: http://www.w3schools.com/schema/schema_dtypes_date.asp – xandy

Questions connexes