4

我正在尝试使用 svcutil 自动生成一些代码。我在 xsd 中有以下内容:

<xs:complexType name="ForsikringstilfelleDetalj">
    <xs:sequence>
        <xs:element name="detaljID" type="xs:string" minOccurs="0" maxOccurs="1"/>

然后我运行以下命令:

svcutil xx.wsdl yy.xsd  /ct:System.Collections.Generic.List`1

然后我得到以下 C# 代码:

public ForsikringstilfelleDetalj[] forsikringstilfelle

我想要的是:

public List<ForsikringstilfelleDetalj> forsikringstilfelle

根据网上的信息 /ct 选项应该告诉 svcutil 使用通用列表进行集合。谁能看到我做错了什么?

4

4 回答 4

5
  • 要将元数据(包括 xsd 方案)下载到当前目录,请使用:

    svcutil /t:metadata http://.../.../service?WSDL
    
  • 要生成客户端代码,请使用:

    svcutil *.wsdl *.xsd /language:C# /ct:System.Collections.Generic.List`1
    

    注意:*.wsdl 和 *.xsd 因为可能有很多服务定义和方案。

  • 要一步生成客户端代码,请使用:

    svcutil http://.../.../service?WSDL /ct:System.Collections.Generic.List`1
    
于 2012-08-21T13:36:09.340 回答
3

我可能回答这个问题有点晚了,但我会把它留在这里,以防其他人有同样的问题。

SvcUtil 不生成基于泛型的类的原因是它只支持 DataContract Serializer 而不是 XML Serializer。DataContract Serializer 可能不支持您拥有的 WSDL/XSD。像拥有一个属性(xsd/xml 不是“DataContractAttribute”)这样简单的东西将默认使用 XMLSerializer,因为 DataContracts 不支持属性。

阅读以下:

“此外,用于引用类型的 /r 和 /ct 开关用于生成数据协定。这些开关在使用 XmlSerializer 时不起作用。”

https://msdn.microsoft.com/en-us/library/aa347733(v=vs.110).aspx

于 2017-01-30T18:32:00.457 回答
0

我无法弄清楚为什么 /ct 开关在我的情况下不能正常工作。希望他们能尽快修复它;同时,我在批处理文件中添加了以下 powershell 命令,以将生成的数组替换为列表:

powershell -Command "(gc ServiceRef.cs) -replace 'ForsikringstilfelleDetalj\[\]', 'System.Collections.Generic.List<ForsikringstilfelleDetalj>' | Out-File ServiceRef.cs"
于 2016-03-03T16:17:33.063 回答
-1

svcutil xx.wsdl yy.xsd /ct:System.Collections.Generic.List仅当您的返回类型为 List 或泛型类时才有效。检查你的方法的返回类型,看看是否都是通用的。

于 2019-01-21T05:28:27.850 回答