Visual Studio XSD 工具:生成集合而不是数组
Posted
技术标签:
【中文标题】Visual Studio XSD 工具:生成集合而不是数组【英文标题】:Visual Studio XSD Tool: Generate Collections Rather Than Arrays 【发布时间】:2010-10-12 01:05:28 【问题描述】:我使用 Visual Studio XSD 实用程序从 XSD 生成了一些 C# 类,它生成了用于存储元素集合的数组,而不是内置的通用 Collection
xsd /? 中没有提到命令行参数提到任何关于生成集合而不是数组的事情,但我知道这可以通过 Visual Studio 生成的 Web 服务代理类来完成,所以我认为它一定是可能的。
有人知道如何让 XSD 实用程序生成集合类而不是数组吗?
【问题讨论】:
你可以在这里找到我的答案-> ***.com/a/24557248/1125467 【参考方案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 并没有完全按照您的要求进行操作(创建列表而不是数组),但这可能是一个起点。
马克
【讨论】:
以上是关于Visual Studio XSD 工具:生成集合而不是数组的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010:IDE 中类的 XML XSD 架构
Visual Studio 2012 命令窗口不支持“xsd”命令吗?
Visual Studio 总是为 App.config 选择错误的 xsd