2013-02-01 16 views
19

Ich versuche, das Ergebnis, das ich von meinem Webdienst erhalte, als Zeichenfolge zu konvertieren und in ein Objekt zu konvertieren.XML-Deserialisierung von String

Dies ist die Zeichenfolge ich von meinem Dienst bekommen:

<StatusDocumentItem><DataUrl/><LastUpdated>2013-01-31T15:28:13.2847259Z</LastUpdated><Message>The processing of this task has started</Message><State>1</State><StateName>Started</StateName></StatusDocumentItem> 

So habe ich eine Klasse für diese als:

[XmlRoot] 
public class StatusDocumentItem 
{ 
    [XmlElement] 
    public string DataUrl; 
    [XmlElement] 
    public string LastUpdated; 
    [XmlElement] 
    public string Message; 
    [XmlElement] 
    public int State; 
    [XmlElement] 
    public string StateName; 
} 

Und das ist, wie ich versuche zu bekommen, dass String als ein Objekt vom Typ StatusDocumentItem mit XMLDeserializer (. NB operationXML enthält den String):

string operationXML = webRequest.getJSON(args[1], args[2], pollURL); 
var serializer = new XmlSerializer(typeof(StatusDocumentItem)); 
StatusDocumentItem result; 

using (TextReader reader = new StringReader(operationXML)) 
{ 
    result = (StatusDocumentItem)serializer.Deserialize(reader); 
} 

Console.WriteLine(result.Message); 

Aber mein Ergebnisobjekt ist immer leer. Was mache ich falsch?

Aktualisieren. Der Wert, den ich von meinem operationXML erhalte, ist wie folgt und hat ein unnötiges xmlns-Attribut, das meine Deserialisierung blockiert. Ohne dieses Attribut funktioniert alles gut. Hier ist, wie es aussieht:

"<StatusDocumentItem xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><DataUrl/><LastUpdated>2013-02-01T12:35:29.9517061Z</LastUpdated><Message>Job put in queue</Message><State>0</State><StateName>Waiting to be processed</StateName></StatusDocumentItem>" 
+1

"operationXML enthält die Zeichenfolge" - tut es? Haben Sie tatsächlich einen Debugger getestet? "getJSON" zum Abrufen von XML sieht fischig aus. –

+1

Wenn Sie Ihr XML-Beispiel auf _operationXML_ setzen. Die Deserialisierung funktioniert einwandfrei. –

+0

Ja, es enthält die Zeichenfolge, hier ist, was ich vom Debugger bekomme: " 2013-02-01T12: 13: 02.0997071Z Die Verarbeitung dieser Aufgabe begonnen hat gestartet“ – Disasterkid

Antwort

50

Try this:

string xml = "<StatusDocumentItem xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><DataUrl/><LastUpdated>2013-02-01T12:35:29.9517061Z</LastUpdated><Message>Job put in queue</Message><State>0</State><StateName>Waiting to be processed</StateName></StatusDocumentItem>"; 
var serializer = new XmlSerializer(typeof(StatusDocumentItem)); 
StatusDocumentItem result; 

using (TextReader reader = new StringReader(xml)) 
{ 
    result = (StatusDocumentItem)serializer.Deserialize(reader); 
} 

Console.WriteLine(result.Message); 
Console.ReadKey(); 

Zeigt es "Job in Warteschlange stellen"?