Как читать XML в класс / классы, которые соответствуют его xsd

Так что у меня есть XSD и веб-сервис, который доставляет в том же формате.

Теперь я могу читать XML в документе, создавать свои объекты из класса и т. Д. Но я думаю, должен быть более простой способ сделать это.

Я прав?;)

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

Ниже приведены автоматически сгенерированные классы (фактически два), использующие xsd.exe.

http://i43.tinypic.com/2rf7j41.png

3 ответа

Решение

Вы можете использовать XmlSerializer для десериализации текста XML в экземпляры классов, сгенерированных xsd.exe.
XmlSerializer будет использовать атрибуты метаданных, размещенные в сгенерированных классах, для отображения между элементами XML и объектами.

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

Вы можете просто создать Typed DataSet из XSD и затем заполнить один из этих объектов XML. Это довольно распространенный метод.

Генератор кода XSD в Liquid XML Studio отлично справляется с задачей создания кода C# или vb.net, совместимого с XML-схемами, с высокой степенью совместимости. Этот код затем можно использовать для вызова или реализации веб-службы.

Если вы внедряете веб-сервис, вы можете взять под контроль WSDL, созданный с использованием XmlSchemaProvider и IXmlSerializable, см. Получение контроля над WSDL.

Другие вопросы по тегам