保护我的代码免受Newtonsoft JSON的侵害

aje*_*jeh 3 c# json.net asp.net-web-api

我正在构建一个教科书.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

一点背景:最初我只是回来iil,但是在浏览器中测试时,它提示下载ImmediateInformation.json文件,其中包含我需要的JSON.以上是尝试将JSON作为纯文本返回,这使我发现Newtonsoft ApiController在参数类型与MSDN文档不匹配时重新定义.

在此输入图像描述

重新上限:问题只是使用JSON下载问题来说明我在做什么.我如何确保当我声明控制器类是其后代时ApiController,它是Microsoft的API控制器,而不是Newtonsoft的?

Cod*_*ter 5

Web API 2默认包含JSON.NET,并在其Json()方法中使用它.您的教程可能不是针对Web API 2,而是针对早期版本,或MVC而不是Web API.

省略JsonRequestBehavior:

return this.Json(iil);
Run Code Online (Sandbox Code Playgroud)

或者只是返回正确的返回类型,让Web API处理序列化:

public ImmediateInformation Get([FromUri] ImmediateInformation ii)
{
    return ii;
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用IHttpActionResult执行此操作:

public IHttpActionResult Get([FromUri] ImmediateInformation ii)
{
    return this.Ok(ii);
}
Run Code Online (Sandbox Code Playgroud)

根据您的编辑和评论,您实际上在寻找我如何说服IE只显示application/json而不是提供下载?.