我正在尝试使用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使用通用列表进行集合。谁能看到我做错了什么?
答案 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或通用类的情况下才有效。检查方法的返回类型,以查看所有方法是否通用。