pagina - xml string to object c#
Deserialización de XML desde String (2)
Estoy intentando convertir el resultado que obtengo de mi servicio web como una cadena y convertirlo en un objeto.
Esta es la cadena que estoy recibiendo de mi servicio:
<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>
Así que tengo una clase para esto como:
[XmlRoot]
public class StatusDocumentItem
{
[XmlElement]
public string DataUrl;
[XmlElement]
public string LastUpdated;
[XmlElement]
public string Message;
[XmlElement]
public int State;
[XmlElement]
public string StateName;
}
Y así es como trato de obtener esa cadena como un objeto de tipo StatusDocumentItem con XMLDeserializer (NB. OperationXML contiene la cadena):
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);
Pero mi objeto de resultado está siempre vacío. ¿Qué estoy haciendo mal?
Actualizar El valor que obtengo de mi operationXML es como este y tiene un atributo xmlns innecesario que bloquea mi deserialización. Sin ese atributo, todo funciona bien. Así es como se ve:
"<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>"
Prueba esto:
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();
¿Muestra "Trabajo puesto en cola"?
AccountRequest xml = null;
var serializer = new XmlSerializer(typeof(AccountRequest));
using (TextReader reader = new StringReader(requestXml))
{
xml = (AccountRequest)serializer.Deserialize(reader);
}