Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deserializing XML from String

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>" 
like image 267
disasterkid Avatar asked Feb 01 '13 12:02

disasterkid


People also ask

How do I deserialize a string in XML?

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.

What is Deserializing XML?

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.


2 Answers

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

like image 167
Cédric Bignon Avatar answered Oct 18 '22 09:10

Cédric Bignon


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);     } } 
like image 29
CRG Avatar answered Oct 18 '22 09:10

CRG