所以我有一个XSD和一个以相同格式提供的web服务。
现在我可以继续将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>
<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
答案 0 :(得分:21)
您可以使用XmlSerializer将XML文本反序列化为 xsd.exe 生成的类的实例。
XmlSerializer将使用元数据属性< / strong>放置在生成的类上,以在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);
}
答案 1 :(得分:0)
您可以从XSD创建一个Typed DataSet,然后使用XML填充其中一个对象。这是非常常见的方法。
答案 2 :(得分:0)
Liquid XML Studio中的XSD Code Generator可以很好地从XML Schema创建高度兼容的c#或vb.net代码。然后,此代码可用于调用或实现Web服务。
如果您实现了Web服务,那么您可以控制使用XmlSchemaProvider和IXmlSerializable生成的WSDL,请参阅Taking Control of your WSDL