Как читать 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
.
Ответы
Ответ 1
Вы можете использовать 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);
}
Ответ 2
Вы можете просто создать Typed DataSet из XSD, а затем заполнить один из этих объектов XML. Это довольно распространенный метод.
Ответ 3
Генератор кода XSD в Liquid XML Studio отлично справляется с созданием высокоуровневого кода С# или vb.net из XML-схемы. Этот код затем можно использовать для вызова или реализации веб-службы.
Если вы внедряете веб-сервис, вы можете взять на себя управление WSDL, созданным с использованием XmlSchemaProvider и IXmlSerializable, см. Контроль вашего WSDL