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

萝らか妹 提交于 2019-11-27 02:14:05

问题


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? ;)

  • Yahoo Maps GeocodeResponse XSD
  • Yahoo Maps GeocodeResponse sample

<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


回答1:


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);
}



回答2:


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.




回答3:


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



来源:https://stackoverflow.com/questions/792976/how-to-read-xml-into-a-class-classes-that-matches-its-xsd

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!