How to read XML into a class/classes that matches its xsd

Kjensen picture Kjensen · Apr 27, 2009 · Viewed 17.1k times · Source

So I have an XSD and a webservice that delivers in that same format.

Now I could go ahead and read the xml into a document, create my objects from the class etc... But I am thinking, there must be some easier way to do that.

Am I right? ;)

<ResultSet xsi:schemaLocation="urn:yahoo:maps http://api.local.yahoo.com/MapsService/V1/GeocodeResponse.xsd">
 <Result precision="address">
  <Latitude>47.643727</Latitude>
  <Longitude>-122.130474</Longitude>
  <Address>1 Microsoft Way, #Way1</Address>
  <City>Redmond</City>
  <State>WA</State>
  <Zip>98052-6399</Zip>
  <Country>US</Country>
 </Result>
</ResultSet>

Below are auto-generated classes (two actually), using xsd.exe

class diagram

Answer

Enrico Campidoglio picture Enrico Campidoglio · Apr 27, 2009

You could use the XmlSerializer to deserialize the XML text into instances of the classes generated by xsd.exe.
The XmlSerializer will use the metadata attributes placed on the generated classes to map back and forth between XML elements and objects.

string xmlSource = "<ResultSet><Result precision=\"address\"><Latitude>47.643727</Latitude></Result></ResultSet>";

XmlSerializer serializer = new XmlSerializer(typeof(ResultSet));
ResultSet output;

using (StringReader reader = new StringReader(xmlSource))
{
    output = (ResultSet)serializer.Deserialize(reader);
}