ASP.NET Core Web API:ContentResult返回JSON时自动去重属性的控制方法
问题
在我的Web API中,我通过以下方式使用ContentResult返回包含JSON数据的字符串:
return Content(jsonString, "application/json");
但奇怪的是,它会自动移除JSON中的重复属性。例如,当我尝试返回如下JSON字符串时:
{ "id": 1840, "action_checklist_id": 145, "id": 6891, "categories_id": 1 }
实际得到的结果是:
{ "id": 6891, "action_checklist_id": 145, "categories_id": 1 }
可以看到,重复的id属性被移除,且最后一个id的值覆盖了第一个,其余重复id均被删除。测试更多重复id的情况也存在该行为,请问是否有办法控制ContentResult的这种自动行为?
解决方法
直接返回字符串而非ContentResult:
不需要ASP.NET Core对响应做额外处理时,直接返回string类型结果,框架不会解析或修改原始JSON字符串:return jsonString;这种方式下,带重复属性的JSON会原封不动发送给客户端。
修改ContentResult的内容类型为纯文本:
将ContentResult的内容类型设为text/plain,框架会把响应当作普通文本处理,不会触发JSON解析逻辑:return Content(jsonString, "text/plain");注意这种情况需要客户端自行处理JSON解析,因为响应头标记的是纯文本格式。
避免生成带重复属性的JSON(推荐):
从JSON规范来看,对象中重复键的行为属于未定义范畴,不同解析器的处理逻辑可能不一致(有的取第一个值,有的取最后一个)。如果没有特殊业务需求,建议在生成JSON阶段就避免重复属性,保证数据的规范性和跨解析器兼容性。
内容的提问来源于stack exchange,提问作者Pawan Nogariya
相关产品推荐
相关产品推荐

