Как читать XML в класс / классы, которые соответствуют его xsd - PullRequest
12 голосов
/ 27 апреля 2009

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

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

Я прав? ;)

</p> <pre><code><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

class diagram

Ответы [ 3 ]

21 голосов
/ 27 апреля 2009

Вы можете использовать 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);
}
0 голосов
/ 28 апреля 2009

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

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

0 голосов
/ 27 апреля 2009

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

...