web-dev-qa-db-fra.com

Désérialisation du XML de la chaîne

J'essaie de convertir le résultat obtenu de mon service Web sous forme de chaîne et de le convertir en objet.

Voici la chaîne que je reçois de mon service:

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

J'ai donc une classe pour cela comme:

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

Et voici comment j'essaie d'obtenir cette chaîne en tant qu'objet de type StatusDocumentItem avec XMLDeserializer (NB. OperationXML contient la chaîne):

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);

Mais mon objet résultat est toujours vide. Qu'est-ce que je fais mal?

Mise à jour. La valeur que j'obtiens de mon operationXML est comme ça et a un attribut xmlns inutile qui bloque ma désérialisation. Sans cet attribut, tout fonctionne bien. Voici à quoi ça ressemble:

"<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>"
28
disasterkid

Essaye ça:

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();

Affiche-t-il "Job mis en file d'attente"?

70
Cédric Bignon