使用svcutil将序列转换为通用列表

时间:2012-08-21 12:51:04

标签: c# code-generation svcutil.exe

我正在尝试使用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 个答案:

答案 0 :(得分: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
    

答案 1 :(得分:3)

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

SvcUtil不生成基于泛型的类的原因是因为它仅受DataContract Serializer支持,而不支持XML Serializer。 DataContract Serializer可能不支持您拥有的WSDL / XSD。只要有一个属性(xsd / xml不是&#34; DataContractAttribute&#34;)就会默认使用XMLSerializer,因为DataContracts不支持属性。

阅读以下内容:

  

&#34;此外,引用类型的/ r和/ ct开关用于   生成数据合同。使用时这些开关不起作用   XmlSerializer的&#34;

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

答案 2 :(得分:0)

我无法弄清楚为什么/ ct开关在我的情况下无法正常工作。希望他们很快能解决这个问题;同时,我在批处理文件中添加了以下powershell命令,用List替换生成的数组:

powershell -Command "(gc ServiceRef.cs) -replace 'ForsikringstilfelleDetalj\[\]', 'System.Collections.Generic.List<ForsikringstilfelleDetalj>' | Out-File ServiceRef.cs"

答案 3 :(得分:-1)

svcutil xx.wsdl yy.xsd /ct:System.Collections.Generic.List仅在返回类型为List或通用类的情况下才有效。检查方法的返回类型,以查看所有方法是否通用。