方法未找到:'Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute(Boolean)'。

8

我下载了一个webapi的示例代码,但遇到了异常问题。我使用Visual Studio 2012 Ultimate版本打开此示例,并安装了最新版本的newtonsoft。在运行该应用程序时出现此错误,但编译成功。有什么办法可以解决这个异常问题吗?

System.MissingMethodException was unhandled by user code
  HResult=-2146233069
  Message=Method not found: 'Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute(Boolean)'.
  Source=System.Net.Http.Formatting
  StackTrace:
       at System.Net.Http.Formatting.JsonContractResolver..ctor(MediaTypeFormatter formatter)
       at System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor()
       at System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters()
       at System.Net.Http.Formatting.MediaTypeFormatterCollection..ctor()
       at System.Web.Http.HttpConfiguration.DefaultFormatters()
       at System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection routes)
       at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
       at System.Lazy`1.CreateValue()
       at System.Lazy`1.LazyInitValue()
       at System.Lazy`1.get_Value()
       at System.Web.Http.GlobalConfiguration.get_Configuration()
       at System.Web.Http.RouteCollectionExtensions.MapHttpRoute(RouteCollection routes, String name, String routeTemplate, Object defaults, Object constraints, HttpMessageHandler handler)
       at System.Web.Http.RouteCollectionExtensions.MapHttpRoute(RouteCollection routes, String name, String routeTemplate, Object defaults)
       at WebAPIRc.RouteConfig.RegisterRoutes(RouteCollection routes) in c:\Users\viemon\Downloads\WebAPIRc\WebAPIRc\WebAPIRc\App_Start\RouteConfig.cs:line 17
       at WebAPIRc.WebApiApplication.Application_Start() in c:\Users\viemon\Downloads\WebAPIRc\WebAPIRc\WebAPIRc\Global.asax.cs:line 36
  InnerException: 

以下是代码出现错误的部分

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
          //Exception error start
            routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
          //exception error end

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

我了解到我需要在NuGet中打开“包含预发行版”,这篇文章告诉了我如何打开“包含预发行版”,但是我该怎么做呢?

3个回答

10

如何开启 NuGet 的“包括预发行版”功能?

要使用“包括预发行版”安装 Json.NET,请在 包管理器控制台 中运行以下命令:

Install-Package Newtonsoft.Json –IncludePrerelease

2

这可能是由于您在GAC中安装了旧版本引起的。对于我来说,版本在.NET 4.0 GAC中,删除它解决了问题。


你能提供更多关于这个的细节吗? - dr.Crow
嘿,我回想了一下,但我认为我在我的.NET4 Gac中有一个版本,可以在这里找到https://dev59.com/gmw05IYBdhLWcg3w72bN,我不得不删除它,以便运行时会选择新版本。https://msdn.microsoft.com/en-us/library/zykhfde0(v=vs.110).aspx我不知道为什么最初会有那个版本在我的GAC中。希望这可以帮助。 - PatrickWalker

1
在我的情况下,您只需要删除RouteConfig中的以下行(已经被抹掉了)。
  //Exception error start
    routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
  //exception error end

在VS2012中,这应该足够了。
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

你可能还需要验证你的控制器。如果你不确定RouteConfig中某些类的作用,也可以将它们移除。在我的情况下,我只保留了这两个:
using System.Web.Mvc;
using System.Web.Routing;

另一个解决方案是,如果您想要并且有时间找出导致冲突的原因,则可以将项目生成输出详细程度设置为详细 (转到 工具->选项->项目和解决方案->生成和运行->MSBuild项目生成输出详细程度),在构建时检查日志。

被接受的答案对我没有用,但是从RouteConfig中删除它确实有用。但是您是否有任何文件说明删除它不会在以后引起任何问题? - Chad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接