14

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

Enrico Campidoglio
  • 56,676
  • 12
  • 126
  • 154
Kjensen
  • 12,447
  • 36
  • 109
  • 171

3 Answers3

23

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);
}
Enrico Campidoglio
  • 56,676
  • 12
  • 126
  • 154
0

You could just create a Typed DataSet from the XSD and then fill one of those objects with the XML. That's the pretty common method.

BobbyShaftoe
  • 28,337
  • 7
  • 52
  • 74
0

The XSD Code Generator in Liquid XML Studio does a great job of creating highly compliant c# or vb.net code from an XML Schema. This code can then be used to call or implement a web service.

If your implementing a web service then you can take control of the WSDL produced using XmlSchemaProvider and IXmlSerializable, see Taking Control of your WSDL

Colin
  • 586
  • 3
  • 6