Как читать 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.
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.