【问题标题】:How to read XML into a class/classes that matches its xsd如何将 XML 读入与其 xsd 匹配的类/类
【发布时间】:2010-10-22 00:49:45
【问题描述】:

所以我有一个 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>

下面是自动生成的类(实际上是两个),使用xsd.exe

【问题讨论】:

    标签: c# .net xml xsd 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】:

      您可以从 XSD 创建一个 Typed DataSet,然后用 XML 填充其中一个对象。这是很常见的方法。

      【讨论】:

      • 有趣!你会怎么填?
      【解决方案3】:

      Liquid XML Studio 中的XSD Code Generator 在从 XML 模式创建高度兼容的 c# 或 vb.net 代码方面做得很好。然后,此代码可用于调用或实现 Web 服务。

      如果您实现 Web 服务,那么您可以控制使用 XmlSchemaProvider 和 IXmlSerializable 生成的 WSDL,请参阅 Taking Control of your WSDL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 2021-10-22
        • 2019-07-02
        • 1970-01-01
        • 1970-01-01
        • 2021-06-24
        相关资源
        最近更新 更多