You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS添加连接服务设置CollectionMappings为Generic.List不生效问题

问题原因

这是Microsoft.Tools.ServiceModel.Svcutil 2.0.3-preview3.21351.2预览版本的已知Bug,CollectionMappings配置项未被正确传递到代码生成逻辑,所以即使在UI界面选择了Generic.List,生成的代理类依旧会返回数组类型,和序列化器选择无关,你观察到的[System.Runtime.Serialization.DataContractAttribute]标识也能佐证这一点。

解决方案

临时应急方案

你当前使用的查找替换Reference.cs的方法可用于短期紧急修复:

  • 查找:System.Threading.Tasks.Task<T[]>
  • 替换为:Task<System.Collections.Generic.List<T>>
    注意:该方案修改的内容会在下次重新生成服务引用时被覆盖,不建议长期使用

方案1:回退到Svcutil稳定版

直接回退到可正常识别集合配置的2.0.2版本即可:

  • 打开Visual Studio Installer,点击「修改」,进入「单个组件」标签页
  • 搜索「WCF Web Service Reference Provider」,卸载预览版本后安装2.0.2正式版
  • 重新打开项目,进入「管理连接的服务」界面删除现有WCF服务引用,重新添加并选择Generic.List作为集合映射类型,生成的代码就会正常返回List

方案2:手动修改配置文件

不需要替换生成的代码,修改配置后重新生成即可生效:

  • 打开WCF服务引用对应的ConnectedService.json文件
  • 在ExtendedData节点下添加/修改配置项:
"CollectionMappings": [
  {
    "TargetCollectionType": "System.Collections.Generic.List`1",
    "Namespace": "System.Collections.Generic"
  }
]
  • 保存后右键点击对应连接服务,选择「重新生成」即可

方案3:使用dotnet-svcutil命令行工具生成代码

如果UI工具的配置始终不生效,可直接用命令行指定参数生成:

  • 全局安装2.0.2稳定版命令行工具:dotnet tool install --global dotnet-svcutil --version 2.0.2
  • 执行生成命令,指定集合类型参数:
dotnet-svcutil http://你的WCF服务地址?wsdl --collection-type System.Collections.Generic.List`1
  • 将生成的代码文件引入项目即可

补充说明

该Bug已经在后续Svcutil正式版本中修复,如果你不愿意回退版本,也可以升级到2.0.3正式版或更高版本,UI配置的集合映射即可正常生效。

内容的提问来源于stack exchange,提问作者Ross Kelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:24:03