Метод не найден 'Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute (логическое значение)

Я загрузил пример кода для webapi, и я получаю это исключение. Я открыл этот образец с помощью Visual Studio 2012 Ultimate Version, и у меня установлена ​​​​последняя версия 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 из этого поста, но как включить "Включить предварительный выпуск" для NuGet?


person Steve    schedule 26.05.2013    source источник


Ответы (3)


как включить, как включить «Включить предварительный выпуск» для NuGet?

Чтобы установить Json.NET с "Включить предварительную версию", выполните следующую команду в Консоль диспетчера пакетов

Install-Package Newtonsoft.Json –IncludePrerelease
person Damith    schedule 26.05.2013

Другая причина этого может заключаться в том, что у вас есть более старая версия в вашем GAC. Для меня версия была в .NET 4.0 GAC, удаление которой решило проблему.

person PatrickWalker    schedule 17.10.2013
comment
Можете ли вы дать более подробную информацию об этом? - person dr.Crow; 29.10.2015
comment
Эй, я вспоминаю, но думаю, что у меня была версия в моем .NET4 Gac, которую можно найти здесь stackoverflow.com/questions/6925043/, и мне пришлось удалить это, поэтому среда выполнения подберет более новую версию msdn.microsoft .com/en-us/library/zykhfde0(v=vs.110).aspx Я не знаю, почему изначально эта версия была в моем GAC. надеюсь, это поможет - person PatrickWalker; 29.10.2015

В моем случае я просто удаляю следующую строку в 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;

Другое решение: если вы хотите и у вас есть время выяснить, что вызывает конфликт, вы можете установить уровень детализации вывода сборки проекта на подробный (Go to Tools-> Options -> Project and Solutions -> Build and Run -> MSBuild project build output verbosity) and upon build check your logs..

person dr.Crow    schedule 02.11.2015
comment
Принятый ответ не сработал для меня, но удаление этого из RouteConfig сработало. Но есть ли у вас какие-либо документы, подтверждающие, что удаление этого не вызовет никаких проблем в будущем? - person Chad; 26.09.2016