保护我的代码免受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;