【问题标题】:Design Strongly typed object from XML从 XML 设计强类型对象
【发布时间】:2011-03-03 16:28:20
【问题描述】:

我有几个需要处理的 XML 文件,我一直使用 XElement 对象并通过属性名称或 XElement 的值提取数据。

我知道必须有更好的方法在 C# 中使用 XML。从 XML 文件自动生成或手动生成强类型对象的最佳方法是什么?

xml格式为

<Group id="####">
    <title>Some Title</title>
    <description>some description</description>
    <Rule id="ID_##" severity="medium" weight="10.0">
        <version>1.001</version>
        <title>Another Title</title>
        <description>Very long description</description>
        <fixtext fixref="F-31r1_fix">Description of fix</fixtext>
        <fix id="F-31r1_fix"/>
        <check system="C-7883r4_chk">
            <check-content-ref name="M" href="URI"/>
            <check-content>Content</check-content>
        </check>
    </Rule>
</Group>

如果我可以将 XML 文件解析为 List&lt;Group&gt;,那将是最好的。

我能想到的唯一方法是手动创建 Group、Rule 和 Check 对象并手动分配数据。如果有更好、更自动化的方法来做到这一点,请告诉我!

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    您可以使用 xsd.exe(随 windows SDK 一起安装,但根据版本在不同的位置 - 我的当前位于 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin)从文件或 cs 代码文件生成 xsd。

    例如:

    xsd.exe myFile.xml
    

    将在 xml 文件的位置为您获取 myFile.xsd。

    那么,

    xsd.exe myFile.xsd /c 
    

    将为您提供一个已定义类的.cs 文件。尝试xsd.exe /? 以获得完整选项(您也可以指定命名空间等)。

    【讨论】:

      【解决方案2】:

      查看Linq to XSD

      LINQ to XSD 技术为 .NET 开发人员提供了对类型化 XML 编程的支持。 LINQ to XSD 有助于 LINQ 项目(.NET 语言集成查询);特别是,LINQ to XSD 增强了现有的 LINQ to XML 技术。

      【讨论】:

        【解决方案3】:

        如果您有 XML 架构,则可以使用 xsd.exe (windows SDK)、svcutil.exe (WCF) 或(我个人偏好)开源替代方案 (Xsd2Code) 等工具生成类。

        【讨论】:

          【解决方案4】:

          您可以在您的类上添加注释,然后使用 XmlSerializer 将您的类实例序列化/反序列化到 XML - 如果您需要更定制的方法,让您的类也实现 IXmlSerializable 然后将序列化/反序列化类中的代码。

          【讨论】:

            【解决方案5】:

            如果您能够更改 XML 格式以满足您的需要,我知道的一种方法是使用 WSDL

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-02-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-10-15
              • 1970-01-01
              • 2021-09-21
              • 2019-12-06
              相关资源
              最近更新 更多