Mamy projekt interfejsu WEB API, który niedawno został przeniesiony na nowy serwer. Używam mojego projektu po dokonaniu pewnych uzupełnień do jego ładunek, ale nagle rzuca się następujący błąd:"Nie można rzucić obiektu typu" System.Net.Http.Formatting.JsonContractResolver ", aby wpisać" Newtonsoft.Json.Serialization.DefaultContractResolver "."
Unable to cast object of type 'System.Net.Http.Formatting.JsonContractResolver' to type 'Newtonsoft.Json.Serialization.DefaultContractResolver'.
Linia wykraczająca kodu w 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;
}
wierzę ten kod został dodany, ponieważ domyślnym wyjściem API był XML, a my potrzebujemy go zamiast JSON.
Podświetlanie (DefaultContractResolver)
wyświetla etykietę podpowiadającą referencje NewtonSoft.JSon.Serialization.DefaultContractResolver
. Podświetlanie ustawień serializersettings.ContractResolver IContractResolver JSonSerializerSettings.ContractResolver
.
Kod jest na tym komputerze od jakiegoś czasu i jedyne, co mogę zmienić, to zainstalowanie nowszej wersji .NET.
Co może spowodować, że linia kodu nagle wygeneruje błąd? I jak mogę to rozwiązać?
Dzięki!
Edit: Jak na żądanie w komentarzach, mój kod serializacji składa się z czymś tak:
json += "{\"employeename\": \"" + Convert.ToString(reader["Employee"])
+ "\"},";
return JsonConvert.DeserializeObject<OrgChartModel>(json);
Edit2: Mamy teraz uruchomiony .NET 4.5. Zgodnie z moją wiedzą, przebiegłem 4.2 wcześniej, ale widząc, że minęło kilka miesięcy, nie mogę być tego pewien.
Zgodnie komentarzu Dominick, Próbuję zmienić obsadę do DefaultContractResolver na następujące kwestie:
var contractResolver =
(IContractResolver)serializerSettings.ContractResolver;
to jednak potem kończy się w API powrocie następujący błąd:
{"Message":"The requested resource does not support http method 'GET'."}
Czy możesz dodać kod deserializacji json?Mam wątpliwość, czy użyłeś deserializacji bezpośrednio do obiektu dynamicznego, a nie używając klas. –
Myślę, że błąd pojawia się w SerializerSettings, ponieważ klasa return jest 'IContractResolver JSonSerializerSettings.ContractResolver', a następnie chcesz' cast'it jako '(DefaultContractResolver)', który jest allready zawarte w 'NewtonSoft.JSon dll', że dołączasz. Musisz więc określić swój "DefaultContractResolver" jako własny, a nie biblioteki DLL. – DomeTune
@PranavPatel - Gotowe. To pomaga? :) – SchmitzIT