设计来自XML的强类型对象

时间:2011-03-03 16:28:21

标签: c# xml

我需要处理几个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<Group>

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

5 个答案:

答案 0 :(得分:8)

您可以使用xsd.exe(与Windows SDK一起安装,但在不同的位置,具体取决于版本 - 我目前在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin)来生成文件中的xsd或cs代码文件。< / p>

例如:

xsd.exe myFile.xml

会在xml文件的位置找到myFile.xsd。

然后,

xsd.exe myFile.xsd /c 

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

答案 1 :(得分:4)

结帐Linq to XSD

  

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您可以在您的课程上添加注释,然后使用XmlSerializer将您的班级实例序列化/反序列化为XML - 如果您需要更自定义的方法,您的班级也会实施IXmlSerializable然后放置该类中的序列化/反序列化代码。

答案 4 :(得分:1)

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