【问题标题】:pass xml and get strongly typed .NET OBjects传递 xml 并获得强类型的 .NET 对象
【发布时间】:2011-08-12 05:30:21
【问题描述】:

我一直在使用 Linq To XML 将 XML 文档映射到 .NET 对象。

谁能指导我是否存在可以传递 XML 文档(字符串)并强烈返回 Type .NET OBject 的地方?

我一直在查看 XSD2Code,但在传递整个 XML 时遇到问题,因为它似乎为每个元素创建了单独的类。

【问题讨论】:

    标签: .net xml xsd xsd2code


    【解决方案1】:

    很简单:

    1. 获取您的 XML 并通过 xsd.exe 命令行工具运行它:

      c:\> xsd.exe yourfile.xml
      

      这将产生一个对应的 XML 模式文件 (yourfile.xsd)

    2. 再次运行 xsd.exe 工具,这次是在 XSD 文件上,以获得 C# 类:

      c:\> xsd.exe /c yourfile.xsd
      

      这将在yourfile.cs 中生成一个代表您的 XML 内容的 C# 类

    3. 在项目中使用该类,只需将您的 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。

    就是这样!

    【讨论】:

    • 谢谢@marc_s,我想要的是如何反序列化 XML 文档并获得强类型的 .NET 对象。
    • @Myagdi 我猜你的意思是类型安全。不幸的是,我们没有在 Deserialize() 上返回 T 的 XmlSerializer<T>,因此您必须自己从 object 转换为 T。我仍然想知道为什么他们没有在 .net2 中引入泛型。
    【解决方案2】:

    只需使用xsd 工具。

    IIRC,你叫它xsd /c yourschema.xsd > classes.cs

    如果你有一堆没有模式的 XML,你也可以使用xsd 来尝试推断模式。无论如何,这应该是一个很好的起点:)

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多