Azure APIM策略中Newtonsoft.Json的通用转换方案咨询
Azure APIM策略兼容JSON对象/数组响应的解析方案
可以通过先将响应解析为JToken(JObject和JArray的基类),再根据类型处理的方式,同时兼容两种场景,甚至能覆盖其他JSON基础类型。
具体实现代码
- 先读取响应为JToken(兼容所有JSON类型)
var responseToken = context.Response.Body.As<JToken>(preserveContent: true);
- 转换为统一的JObject格式
如果需要把数组包装成JObject的一个属性(方便后续统一处理),可以这样写:
JObject response; if (responseToken.Type == JTokenType.Array) { // 将数组包装到JObject的指定字段中,比如"items" response = new JObject { ["items"] = responseToken }; } else if (responseToken.Type == JTokenType.Object) { // 直接转换为JObject response = (JObject)responseToken; } else { // 处理字符串、数值等其他JSON类型,按需包装 response = new JObject { ["content"] = responseToken }; }
如果只针对对象/数组场景,想要更简洁的一行式处理,可以用三元表达式:
var response = responseToken.Type == JTokenType.Array ? new JObject { ["items"] = responseToken } : (JObject)responseToken;
注意事项
preserveContent: true必须保留,确保后续APIM流程还能读取响应体内容- 如果接口可能返回纯字符串、数值这类JSON基础类型,建议保留else分支做兼容处理
内容的提问来源于stack exchange,提问作者user3437721
相关产品推荐
相关产品推荐

