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

Connected Services生成SOAP客户端遇Xml序列化异常求助

解决SOAP客户端序列化:object类型payload无法序列化自定义Task类的问题

方案1:利用分部类添加XmlInclude/SoapInclude特性

自动生成的B2BRequest是分部类,你可以在独立的代码文件中扩展它,添加序列化所需的特性,完全不会被重新生成的代码覆盖:

// 新建一个.cs文件(不要放在自动生成的目录下)
using System.Xml.Serialization;
using System.Web.Services.Protocols;

// 和生成的B2BRequest保持相同命名空间
namespace YourGeneratedServiceNamespace
{
    // 针对XmlSerializer添加特性
    [XmlInclude(typeof(YourCustomTaskClass))]
    // 针对SOAP序列化添加特性
    [SoapInclude(typeof(YourCustomTaskClass))]
    public partial class B2BRequest { }
}

添加后,序列化器就能识别你的自定义Task类型,不会再抛出类型未知的异常。

方案2:手动创建XmlSerializer时指定已知类型

如果分部类特性的方式没生效,可手动控制序列化器的创建,把自定义Task类型加入已知类型列表:

// 替换原有的客户端调用逻辑
var request = new B2BRequest { payload = new YourCustomTaskClass() };

// 创建序列化器时传入自定义Task类型
var serializer = new XmlSerializer(typeof(B2BRequest), new Type[] { typeof(YourCustomTaskClass) });

// 手动序列化请求内容
using var writer = new StringWriter();
serializer.Serialize(writer, request);
var requestXml = writer.ToString();

// 用生成的SOAP客户端发送XML内容(具体方法参考客户端API,比如SendRequest或类似方法)

方案3:修改服务引用生成配置(长期解决方案)

如果需要频繁重新生成客户端,可以在Connected Services的配置里,让工具自动识别Task类型:

  • 在Visual Studio/Rider中找到Connected Services里的SOAP服务
  • 打开「配置服务引用」(Configure Service Reference)
  • 进入高级选项,找到「额外已知类型」(Additional known types),添加你的自定义Task类型
  • 重新生成客户端后,B2BRequest的payload属性会自动适配类型,或自带所需的序列化特性

注意事项

  • 确保自定义Task类的命名空间和生成的服务类一致,否则要在特性里指定完整类型名
  • SOAP服务优先使用[SoapInclude],普通XML序列化用[XmlInclude]
  • 所有自定义代码都放在独立文件中,绝对不要修改自动生成的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:47:34