保护我的代码免受Newtonsoft JSON

时间:2018-02-13 21:01:08

标签: c# asp.net-web-api json.net

我正在构建一个教科书.NET WebAPI Web服务,假设在最简单的情况下接收GET请求并返回JSON对象数组。

但是该项目还加载了NewtonsoftJSON nuget包,显然该包重新定义了ApiController类,因此它的Json()方法具有不同的声明。最终结果是我得到以下编译时错误:

enter image description here

如何保护我的控制器声明不被牛顿软件重新定义?

public class ImmediateInformationController : ApiController
{
    public JsonResult Get([FromUri] ImmediateInformation ii)
    {
        // some code here
        return this.Json(iil, JsonRequestBehavior.AllowGet);
    }
}

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

enter image description here

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

2 个答案:

答案 0 :(得分:5)

Web API 2默认包含JSON.NET,并在其Why are there differing definitions of INT64_MIN? And why do they behave differently?中使用它。您的教程可能不是针对Web API 2,而是针对早期版本,或Json() method

省略JsonRequestBehavior:

#define MAX_INT 32767
#define MIN_INT (-MAX_INT - 1)
/* Translates to -32767 - 1 ==> -32768 */

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

return this.Json(iil);

你也可以使用IHttpActionResult:

public ImmediateInformation Get([FromUri] ImmediateInformation ii)
{
    return ii;
}

根据您的编辑和评论,您实际上在寻找MVC instead of Web API

答案 1 :(得分:0)

您需要完全限定参数。

using NJson = Newtonsoft.Json;

或者您可以使用alias

months