C# 保护我的代码不受Newtonsoft JSON的影响

C# 保护我的代码不受Newtonsoft JSON的影响,c#,asp.net-web-api,json.net,C#,Asp.net Web Api,Json.net,我正在构建一个教科书式的.NETWebAPI web服务,它应该在最简单的情况下接收GET请求并返回一个JSON对象数组 但是该项目也加载了NewtonsoftJSON nuget包,显然该包重新定义了ApiController类,因此它的Json()方法具有不同的声明。最终结果是我得到了以下编译时错误: 如何保护我的控制器声明不被Newtonsoft重新定义? public class ImmediateInformationController : ApiController {

我正在构建一个教科书式的.NETWebAPI 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
,但在浏览器中测试时,它提示下载
ImmediateInformation.json
文件,其中包含我需要的json。上面是一次将JSON作为纯文本返回的尝试,这让我发现,当参数类型与MSDN文档不匹配时,Newtonsoft重新定义了apicController


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

您需要完全限定参数

public class ImmediateInformationController : ApiController
{
    public JsonResult Get([FromUri] ImmediateInformation ii)
    {
        // some code here
        return this.Json(iil, JsonRequestBehavior.AllowGet);
    }
}
return this.Json(iil, System.Web.Mvc.JsonRequestBehavior.AllowGet);
或者你也可以用一个


Web API 2默认包含JSON.NET,并在其应用程序中使用它。您的教程的目标可能不是WebAPI2,而是更早的版本,或者更高版本

忽略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);
}

根据您的编辑和评论,您实际上正在寻找。

我没有使用
Newtonsoft,它被一个引用的nuget软件包(MigraDocs)使用。啊,那么alias就不在了。完全限定也不在了,因为它是由Newtonsoft(或其方法
Json
)重新定义的
ApiController
类,但是
jsonrequestbehavior
很好。我明白了,您对这个问题的更新现在清楚地表明了这一点。当时我同意CodeCaster的建议。我最初返回了POCO,但当浏览器弹出一个名为
.json
的文件的下载提示,并开始寻找一种在响应主体中简单返回结果的方法时,我感到困惑。这可能会让我在上面大惊小怪。听起来默认内容配置有问题。我猜您使用的是Internet Explorer,它不喜欢呈现JSON。如果我从.ashx返回相同的JSON,它将显示出来。我就这个问题问了另一个问题,你似乎混淆了MVC和WebAPI名称空间/代码。。。是ASP.Net MVC枚举,不应在WebAPI代码中使用(对于在两个名称空间中具有相同名称的属性也是如此)。发布更完整的名称空间会让事情变得更清楚…是的,我意识到了这一点。我的问题是,我只知道WebAPI大约2个小时,所以犯了一些愚蠢的错误,并且像Newtonsoft重新定义MVC类这样的引用令人难以置信。