У нас есть проект WEB API, который недавно был перенесен на новый сервер. Я запускаю свой проект после внесения некоторых дополнений в его "полезную нагрузку", но он неожиданно вызывает следующую ошибку:
Невозможно запустить объект типа 'System.Net.Http.Formatting.JsonContractResolver' для ввода типа 'Newtonsoft.Json.Serialization.DefaultContractResolver'.
Оскорбительная строка кода находится в global.asax:
protected void Application_Start() {
GlobalConfiguration.Configure(WebApiConfig.Register);
var serializerSettings =
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var contractResolver =
(DefaultContractResolver)serializerSettings.ContractResolver;
contractResolver.IgnoreSerializableAttribute = true;
}
Я считаю, что этот код был добавлен, потому что вывод по умолчанию API был XML, и нам нужно, чтобы он был JSON.
Выделение (DefaultContractResolver)
вызывает подсказку, указывающую, что она ссылается на NewtonSoft.JSon.Serialization.DefaultContractResolver
. Выделение serializersettings.ContractResolver ссылки IContractResolver JSonSerializerSettings.ContractResolver
.
Код был на этом компьютере в течение некоторого времени, и единственное, что, я думаю, я изменил, это установка более новой версии .NET.
Что может заставить эту строку кода внезапно вызвать ошибку? И как я могу его решить?
Спасибо!
Изменить: согласно запросу в комментариях мой код сериализации состоит из следующего:
json += "{\"employeename\": \"" + Convert.ToString(reader["Employee"])
+ "\"},";
return JsonConvert.DeserializeObject<OrgChartModel>(json);
Edit2: теперь мы запускаем .NET 4.5. Насколько я знаю, мы запустили 4.2 ранее, но, увидев, что прошло несколько месяцев, я не могу быть уверен.
В соответствии с комментарием Dominick, я попытался изменить приведение к DefaultContractResolver на следующее:
var contractResolver =
(IContractResolver)serializerSettings.ContractResolver;
Это, однако, затем заканчивается в API, возвращающем следующую ошибку:
{"Message":"The requested resource does not support http method 'GET'."}