【发布时间】:2011-08-12 05:30:21
【问题描述】:
我一直在使用 Linq To XML 将 XML 文档映射到 .NET 对象。
谁能指导我是否存在可以传递 XML 文档(字符串)并强烈返回 Type .NET OBject 的地方?
我一直在查看 XSD2Code,但在传递整个 XML 时遇到问题,因为它似乎为每个元素创建了单独的类。
【问题讨论】:
我一直在使用 Linq To XML 将 XML 文档映射到 .NET 对象。
谁能指导我是否存在可以传递 XML 文档(字符串)并强烈返回 Type .NET OBject 的地方?
我一直在查看 XSD2Code,但在传递整个 XML 时遇到问题,因为它似乎为每个元素创建了单独的类。
【问题讨论】:
很简单:
获取您的 XML 并通过 xsd.exe 命令行工具运行它:
c:\> xsd.exe yourfile.xml
这将产生一个对应的 XML 模式文件 (yourfile.xsd)
再次运行 xsd.exe 工具,这次是在 XSD 文件上,以获得 C# 类:
c:\> xsd.exe /c yourfile.xsd
这将在yourfile.cs 中生成一个代表您的 XML 内容的 C# 类
在项目中使用该类,只需将您的 XML 反序列化为 C# 对象:
XmlSerializer ser = new XmlSerializer(typeof(YourClass));
var result = ser.Deserialize(new FileStream(@"D:\temp\yourfile.xml", FileMode.Open));
如果一切正常,您的 result 现在包含一个 C# 类实例,该实例表示该 XML 文件内容的 1:1。
就是这样!
【讨论】:
Deserialize() 上返回 T 的 XmlSerializer<T>,因此您必须自己从 object 转换为 T。我仍然想知道为什么他们没有在 .net2 中引入泛型。
只需使用xsd 工具。
IIRC,你叫它xsd /c yourschema.xsd > classes.cs。
如果你有一堆没有模式的 XML,你也可以使用xsd 来尝试推断模式。无论如何,这应该是一个很好的起点:)
【讨论】: