保护我的代码免受Newtonsoft JSON的侵害
我正在构建一个教科书.NET WebAPI Web服务,在最简单的情况下,它应该接收一个GET请求并返回一个JSON对象数组。
但是该项目还加载了NewtonsoftJSON nuget包,显然该包重新定义了ApiController
类,因此它的Json()
方法具有不同的声明。 最终结果是我得到以下编译时错误:
如何保护我的控制器声明不被Newtonsoft重新定义?
public class ImmediateInformationController : ApiController { public JsonResult Get([FromUri] ImmediateInformation ii) { // some code here return this.Json(iil, JsonRequestBehavior.AllowGet); } }
一点背景:最初我只返回iil
,但在浏览器中测试时,它提示下载包含我需要的JSON的ImmediateInformation.json
文件。 以上是尝试将JSON作为纯文本返回,这使我发现当参数类型与MSDN文档不匹配时,Newtonsoft重新定义了ApiController
。
重新上限:问题只是使用JSON下载问题来说明我在做什么。 我如何确保当我声明控制器类是ApiController
的后代时,它是Microsoft的API控制器,而不是Newtonsoft的?
Web API 2默认包含JSON.NET,并在其Json()方法中使用它。 您的教程可能不是针对Web API 2,而是针对早期版本,或MVC而不是Web API 。
省略JsonRequestBehavior:
return this.Json(iil);
或者只是返回正确的返回类型,让Web API处理序列化:
public ImmediateInformation Get([FromUri] ImmediateInformation ii) { return ii; }
你也可以使用IHttpActionResult:
public IHttpActionResult Get([FromUri] ImmediateInformation ii) { return this.Ok(ii); }
根据您的编辑和评论,您实际上在寻找我如何说服IE只显示application / json而不是提供下载? 。
您需要完全限定参数。
return this.Json(iil, System.Web.Mvc.JsonRequestBehavior.AllowGet);
或者您可以使用别名 。
using NJson = Newtonsoft.Json;