I'm trying to convert the result I get from my web service as a string and convert it to an object.
This is the string I'm getting from my 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>
So I have a class for this as:
[XmlRoot] public class StatusDocumentItem { [XmlElement] public string DataUrl; [XmlElement] public string LastUpdated; [XmlElement] public string Message; [XmlElement] public int State; [XmlElement] public string StateName; }
And this is how I'm trying to get that string as an object of type StatusDocumentItem with XMLDeserializer (NB. operationXML contains the 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);
But my result object is always empty. What am I doing wrong?
Update. The value I get from my operationXML is like this and has an unnecessary xmlns attribute that is blocking my deserialization. Without that attribute, everything is working fine. Here is how it looks like:
"<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>"
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.
Deserialization is the process of reading an instance of an XML document and constructing an object that is strongly typed to the XML Schema (XSD) of the document. Before deserializing, an XmlSerializer must be constructed using the type of the object that is being deserialized.
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();
Does it show "Job put in queue"?
This generic extension works well for me....
public static class XmlHelper { public static T FromXml<T>(this string value) { using TextReader reader = new StringReader(value); return (T) new XmlSerializer(typeof(T)).Deserialize(reader); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With