【问题标题】:Visual Studio XSD Tool: Generate Collections Rather Than ArraysVisual Studio XSD 工具:生成集合而不是数组
【发布时间】:2010-10-12 01:05:28
【问题描述】:

我使用 Visual Studio XSD 实用程序从 XSD 生成了一些 C# 类,它生成了用于存储元素集合的数组,而不是内置的通用 Collection(或相关)类之一。

xsd /? 中没有提到命令行参数提到任何关于生成集合而不是数组的事情,但我知道这可以通过 Visual Studio 生成的 Web 服务代理类来完成,所以我认为它一定是可能的。

有人知道如何让 XSD 实用程序生成集合类而不是数组吗?

【问题讨论】:

标签: xml visual-studio xsd code-generation


【解决方案1】:

在寻找答案时发现了这篇文章。我正在使用这个工具:http://xsd2code.codeplex.com/

【讨论】:

    【解决方案2】:

    问题在于 XSD 与 XML 语言无关。它不能使用其他不支持的 Java 或 C# 中的任何内容。数组是最小的公分母。

    Java 开发人员使用 OXM 库(如 XStream)将对象编组为 XML 并返回。它允许您在从对象到 XML 时指定自定义类型。听起来您必须在 .NET 工具箱中找到类似的东西。

    这不是您问题的答案,但这就是我认为 XSD 无法完成这项工作的原因。就像 Java 开发人员接触 XStream 一样,您必须另寻他处。

    【讨论】:

      【解决方案3】:

      您已经看到了将集合与服务引用一起使用的能力,而不是与 Web 引用一起使用。请查看 svcutil.exe 实用程序。看起来 svcutil /t:code file.xsd 可能会为您执行此操作。

      【讨论】:

        【解决方案4】:

        不幸的是,目前我不知道有任何工具可以可靠地执行此操作。

        曾经有一个 XSDObjectGen(或类似的东西),但该工具似乎已经从网络空间中消失了 :-(

        我看到一种方法使用 XSDTidy 将所有 int[] 替换为 List 而不是 XSD 工具的输出 - 似乎有效,但似乎有点笨拙。

        这是CodeProject article on XSDTidy

        我一直试图再次找到的是一位绅士的博客文章,他基本上剖析了 Reflector 中 XSD 的内部工作原理,然后利用他在这方面获得的知识构建了自己的工具,使用了大量的.NET 核心类。如果我没记错的话,是this blog post here ("writing your own xsd.exe")。 Mike 并没有完全按照您的要求进行操作(创建列表而不是数组),但这可能是一个起点。

        马克

        【讨论】:

          猜你喜欢
          • 2011-11-08
          • 1970-01-01
          • 2012-08-03
          • 2011-08-23
          • 2010-10-23
          • 1970-01-01
          • 2015-08-02
          • 1970-01-01
          • 2011-08-30
          相关资源
          最近更新 更多