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

C# 使用svcutil将序列转换为通用列表,c#,code-generation,svcutil.exe,C#,Code Generation,Svcutil.exe,我正在尝试使用svcuti自动生成一些代码。我在xsd中有以下内容: <xs:complexType name="ForsikringstilfelleDetalj"> <xs:sequence> <xs:element name="detaljID" type="xs:string" minOccurs="0" maxOccurs="1"/> 然后我得到以下C代码: 我想要的是: public List<Forsikrings

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

<xs:complexType name="ForsikringstilfelleDetalj">
    <xs:sequence>
        <xs:element name="detaljID" type="xs:string" minOccurs="0" maxOccurs="1"/>
然后我得到以下C代码:

我想要的是:

public List<ForsikringstilfelleDetalj> forsikringstilfelle
Sikringstillfelle的公共列表 根据网上的信息,/ct选项应该告诉svcutil对集合使用通用列表。有人能看出我做错了什么吗?

  • 要将元数据(包括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
    

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

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

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

SvcUtil不生成基于泛型的类的原因是,只有DataContract序列化程序支持它,而XML序列化程序不支持它。DataContract序列化程序可能不支持您拥有的WSDL/XSD。由于DataContracts不支持属性,一些简单的属性(xsd/xml而不是“DataContractAttribute”)将默认使用XMLSerializer

阅读以下内容:

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


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

谢谢您的回答,但这看起来与我的相同tried@ShirazBhaiji,您是否尝试在某个目录中打开命令提示符并执行我的答案中的前两个命令?
列表
类型是否显示在.cs文件中?如果没有,输出是什么?我在磁盘上有wsdl和xsd,所以我只运行了第二个命令,我得到的输出是有问题的。我的xsd一定有什么特别的东西。在您的测试中,wsdl是否来自.NETWeb服务?在xsd中,列表的名称是否有前缀“ArrayOf”?@ShirazBhaiji,是的,下载的xsd文件中有“ArrayOf”。我正在使用WCF(.NET 4.0)服务测试命令行。在生成的cs文件中有
列表
(我使用了我答案的第二个命令)。
svcutil http://.../.../service?WSDL /ct:System.Collections.Generic.List`1
powershell -Command "(gc ServiceRef.cs) -replace 'ForsikringstilfelleDetalj\[\]', 'System.Collections.Generic.List<ForsikringstilfelleDetalj>' | Out-File ServiceRef.cs"