2010-11-23 9 views
0

Ich habe eine XML-Zeichenfolge wie folgt aus:Warum Deserialisierung von XML in Object gibt Nullwert zurück?

<?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> 

Ich möchte es in ein Objekt deserialisieren, so habe ich diese Klasse:

[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; } 
} 

und dann diesen Code verwenden, um deserialisiert:

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

Rückgabewert war nicht null, aber alle seine Eigenschaften waren null-Wert:

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

was ist hier falsch? Habe ich etwas vergessen?

Vielen Dank.

+1

Als eine Randnotiz: Wenn Sie ein Stück XML haben; Sie könnten das Befehlszeilentool xsd.exe verwenden, um ein XML-Schema zu generieren, und in einem zweiten Schritt eine C# -Klasse aus diesem XML-Code, die dieses XML in eine C# -Klasse deserialisieren kann. Nur ein Gedanke ... anstelle von vielen Stunden der Hand-Codierung - nur zweimal xsd.exe genannt - und du bist fertig! –

Antwort

7

In Ihrem XML sind alle Ihre 'vmeet' 'begin_date' alle elements, aber in Ihrer UserInfo-Klasse deklarieren Sie sie als XMLAttribute. Versuchen Sie, sie zu XMLElement zu ändern, sollte helfen.

+0

danke, ich werde versuchen :) – Vimvq1987

+0

ein anderes Problem, wenn ich es deserialize, kann der Datetime-Wert nicht deserialize richtig sein (es scheint, dass das Fehlen von Schema), Ende gibt Wert zurück: Die Zeichenfolge '2010-04-21 08:53 'ist kein gültiger AllXsd-Wert. Können Sie einen Workaround vorschlagen? – Vimvq1987

+0

Ich bin mir nicht sicher, welche Art von Datetime-Format MS in der Serialisierung verwendet, aber höchstwahrscheinlich sollte es das Standard-Format XSD Datetime einhalten: http://www.w3schools.com/schema/schema_dtypes_date.asp – xandy