Azure Function中如何反序列化含XML属性值的JSON请求
报错原因
反序列化直接失败的核心原因是你收到的请求体本身不是合法JSON格式,存在两处语法错误:
policyValue字段存储的XML内容中,action="allow"部分直接使用了双引号,和JSON字符串的边界双引号冲突,解析器读到这里会判定字符串提前终止,后续内容直接触发语法报错operationPolicies数组内的对象末尾多了一个多余的逗号,标准JSON语法不允许对象/数组最后一个元素后存在尾逗号
解决方法
根据你是否能控制上游请求的发送逻辑,选择对应方案即可:
方案1:可调整上游请求构造逻辑
直接让上游发送符合规范的合法JSON即可,修改两个点:
- JSON字符串内部的所有双引号统一转义为
\" - 删除JSON结构里多余的尾逗号
修正后的合法请求示例如下,可以直接被任意JSON解析器正常反序列化,不需要对XML字段做特殊处理:
{ "policyVersionedApiName": "petstoreoperationpolicyapi", "operationPolicies": [ { "policyFormat": "rawxml", "operationId": "createUsersWithArrayInput", "policyValue": "<policies> <inbound> <base/> <ip-filter action=\"allow\"> <address>10.100.7.1</address> </ip-filter> </inbound> </policies>" } ] }
方案2:无法修改上游发送逻辑
不要直接对原始请求体用默认JSON反序列化方法,先做文本预处理再解析:
- 先把请求体读取为原始字符串,定位到
policyValue字段的取值范围,将字段值内部未转义的双引号替换为\" - 正则匹配删除JSON结构里所有多余的尾逗号
- 预处理得到合法JSON字符串后,再执行反序列化操作
提示:如果XML内容里还包含换行、反斜杠等其他特殊字符,预处理逻辑需要同步补充对应的转义规则,避免触发其他解析错误。
内容的提问来源于stack exchange,提问作者Ramesh Baddam
相关产品推荐
相关产品推荐

