Azure Function Event Hub触发器出现System.Byte[]类型不支持序列化错误
问题原因
你遇到的错误由于不支持 System.Byte[] 类型,序列化操作失败,本质是部分发送到源Event Hub的消息以原始字节数组(byte[])形式写入,而你当前Azure Function的Event Hub输出绑定默认使用JSON序列化器,遇到未封装的byte[]类型就会触发异常。能正常流转的消息均为字符串、JSON对象等序列化器默认支持的类型。
解决方案
可任选以下任意一种方案修复:
- 方案1:修改输出绑定配置,直接透传原始消息
如果你使用C#进程内(In-Process)模型,直接将输出参数类型改为EventData或者byte[]即可跳过默认序列化逻辑,示例代码:[FunctionName("EventHubDataTransfer")] public static async Task Run( [EventHubTrigger("sourceHubName", Connection = "SourceEventHubConnection")] EventData[] inputEvents, [EventHub("targetHubName", Connection = "TargetEventHubConnection")] IAsyncCollector<EventData> outputCollector, ILogger log) { foreach (var eventItem in inputEvents) { await outputCollector.AddAsync(eventItem); } } - 方案2:封装字节数组为可序列化类型
如果你需要保留原有JSON序列化逻辑,可以将byte[]转换为Base64字符串后再输出,示例代码:string outputContent = Convert.ToBase64String(rawByteArray); - 方案3:自定义序列化规则(适用于隔离进程(Isolated Worker)模型)
隔离进程模型默认使用System.Text.Json做序列化,你可以在Program.cs中为byte[]类型添加自定义序列化转换器,或者配置输出绑定跳过序列化直接传递二进制内容。
内容的提问来源于stack exchange,提问作者Jagan
相关产品推荐
相关产品推荐

