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

Azure Logic App读取Service Bus消息带序列化前缀无法解析JSON

问题根因

消息头部的@string3http://schemas.microsoft.com/2003/10/Serialization/前缀是WCF NetDataContractSerializer做二进制字符串序列化时自动生成的类型标识头,和你发送的JSON内容本身无关。
问题核心原因是Azure DevOps内置的PublishToAzureServiceBus任务默认使用WCF二进制序列化规则封装消息,和Azure DevOps Webhook直接推送纯JSON的格式不统一,Logic App读取消息时直接将原始字节转为字符串,就会把这段序列化头一并带出,最终导致JSON解析失败。

解决方案

按优先级从高到低选择即可:

方案1:统一发送侧消息格式(最优解,一劳永逸)

  • 弃用内置的PublishToAzureServiceBus任务发送JSON,改用Azure CLI任务或者HTTP任务调用Service Bus原生REST API发消息,发送时明确指定Content-Type为application/json,直接传递原始JSON字符串,完全绕开WCF序列化逻辑。
  • 如果必须使用内置PublishToAzureServiceBus任务,检查任务配置项,开启「发送原始消息」开关(高版本任务支持该参数),关闭默认的序列化封装。
  • Azure DevOps Webhook本身发送的就是无封装的纯JSON,不需要调整配置。

方案2:Logic App侧做内容清洗(临时快速修复)

如果暂时改不了发送侧配置,直接在Logic App里加一步字符串处理,剥离前缀后再解析JSON:

  1. 从Service Bus触发器拿到消息内容后,先定位第一个{字符的位置
  2. 截取从该位置到字符串末尾的部分,就是合法的纯JSON内容
  3. 对截取后的内容执行JSON解析即可

可以直接用Logic App内置表达式一步完成处理:

json(substring(triggerOutputs()?['body']['ContentData'], indexOf(triggerOutputs()?['body']['ContentData'], '{')))

注意:如果你的消息体在JSON主体前可能出现{字符,这个截取逻辑会出错,优先选择发送侧改造的方案。

方案3:Service Bus队列配置转换规则

可以给Service Bus队列配置消息入站转换规则,自动识别剥离WCF序列化头,不过该方案配置复杂度高,非特殊场景不推荐使用。

验证方法

修改配置后用Service Bus的peek功能查看入队消息,如果消息开头直接是{,没有额外前缀,就说明配置生效,后续JSON解析不会再报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:24:11