Convert XML String to Object

c#, xml, xml-parsing, xml-serialization

Solution

You need to use the `xsd.exe` tool which gets installed with the Windows SDK into a directory something similar to:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin

And on 64-bit computers:

C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\bin

And on Windows 10 computers:

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin

On the first run, you use `xsd.exe` and you convert your sample XML into a XSD file (XML schema file):

xsd yourfile.xml

This gives you `yourfile.xsd`, which in a second step, you can convert again using `xsd.exe` into a C# class:

xsd yourfile.xsd /c

This should give you a file `yourfile.cs` which will contain a C# class that you can use to deserialize the XML file you're getting - something like:

XmlSerializer serializer = new XmlSerializer(typeof(msg));
msg resultingMessage = (msg)serializer.Deserialize(new XmlTextReader("yourfile.xml"));

Should work pretty well for most cases.

Update: the XML serializer will take any stream as its input - either a file or a memory stream will be fine:

XmlSerializer serializer = new XmlSerializer(typeof(msg));
MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(inputString));
msg resultingMessage = (msg)serializer.Deserialize(memStream);

or use a StringReader:

XmlSerializer serializer = new XmlSerializer(typeof(msg));
StringReader rdr = new StringReader(inputString);
msg resultingMessage = (msg)serializer.Deserialize(rdr);

Problem

I am receiving XML strings over a socket, and would like to convert these to C# objects. The messages are of the form: ``` <msg> <id>1</id> <action>stop</action> </msg> ``` How can this be done?

Original source

Related problems