2016-09-01 32 views
12

Son zamanlarda yeni bir sunucuya taşınan bir WEB API projemiz var. Ben onun yük için bazı eklemeler yaptıktan sonra projemi koşuyorum, ama aniden aşağıdaki hatayı atar:" 'Newtonsoft.Json.Serialization.DefaultContractResolver' yazın türü 'System.Net.Http.Formatting.JsonContractResolver' nesne döküm edilemiyor."

Unable to cast object of type 'System.Net.Http.Formatting.JsonContractResolver' to type 'Newtonsoft.Json.Serialization.DefaultContractResolver'.

kod kusurlu hattı Global.asax içinde:

protected void Application_Start() { 
     GlobalConfiguration.Configure(WebApiConfig.Register); 

     var serializerSettings = 
     GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings; 
     var contractResolver = 
      (DefaultContractResolver)serializerSettings.ContractResolver; 
      contractResolver.IgnoreSerializableAttribute = true; 
    } 

inanıyorum Bu kod, API'nin varsayılan çıktısı XML olduğundan ve bunun yerine JSON olması gerektiğinden eklenmiştir. (DefaultContractResolver) vurgulama

o NewtonSoft.JSon.Serialization.DefaultContractResolver başvuran belirten bir araç ipucu getirir. Serialractettings.ContractResolver başvuruları vurgulanıyor IContractResolver JSonSerializerSettings.ContractResolver.

kod süredir bu makinede olmuştur ve ben değiştim sanırım tek şey .NET yeni bir sürümünü yüklemeden edildi.

Ne aniden bir hata oluşturması kod satırını neden olabilir? Ve bunu nasıl çözebilirim?

Teşekkürler!

Düzenleme:

json += "{\"employeename\": \"" + Convert.ToString(reader["Employee"]) 
+ "\"},"; 

return JsonConvert.DeserializeObject<OrgChartModel>(json); 

EDIT2:: Açıklamalarda isteği uyarınca, benim seri kodu aşağıdaki gibi bir şey oluşur Şimdi .NET 4.5 azalıyor. Bilgimin en iyisi olarak, 4.2'yi daha önce çalıştırdık, ancak birkaç ay olduğunu gördük, emin olamıyorum. Dominick tarafından yorumun gereğince

, şuna DefaultContractResolver için döküm değiştirmeyi denedim:

  var contractResolver = 
      (IContractResolver)serializerSettings.ContractResolver; 

Ancak bu, daha sonra API biter aşağıdaki hatayı dönen:

{"Message":"The requested resource does not support http method 'GET'."}

+0

json seri kodunuzu ekleyebilir misiniz?Seriyi kullanarak desantifikasyonu doğrudan dinamik nesneye doğru kullandığınızı şüpheliyim. –

+0

Ben dönüş sınıf 'IContractResolver JSonSerializerSettings.ContractResolver' çünkü hata, SerializerSettings kadar gelir düşünmek ve istediğinizden daha hiç' cast'it allready 'NewtonSoft.JSon dll' dahildir' (DefaultContractResolver) 'olarak o sen dahil Yani, DefaultContractResolver'ınızı dll olanları değil, kendiniz belirtmeniz gerekir. – DomeTune

+0

@PranavPatel - Bitti. Bu yardımcı olur mu? :) – SchmitzIT

cevap

2

ben (biz sürüm 6 kullanıyorlardı önce 8) Json.NET daha yeni bir sürümü kullanarak sorunu çözmek başardı yardımcı olur. Bu hatayı çözdü.

5

Bu koddan anladığım şey, çözümleyicinizin IgnoreSerializableAttribute değerini true olarak ayarlamanızdır.

1> bunu yapılmalıdır neden biliyor musunuz? Kaldırırsanız etkisi nedir? Ben true IgnoreSerializableAttribute ayarı Microsoft'un serialisers gibi davrandığını gelen Newtonsoft.Json durdurmak ve bunun yerine sadece kamu özelliklerini tefrika edeceğini Newton Doc görebilirsiniz.

Hala buna ihtiyacınız var mı?

2> Geçerli SerializerSettings'inizin türü nedir (yalnızca varsayılan değer olmadığını biliyoruz, bu nedenle muhtemelen bir yerde değiştirdiniz?) Varsayılan olarak false olarak IgnoreSerializableAttribute olduğundan emin misiniz? Eğer öyleyse, muhtemelen bu özniteliğe gerçek türünü kullanarak ulaşmanın bir yolu var mı?

o

+0

Merhaba. 1) Ayarı kullanmazsam, çıktı sadece ihtiyacım olan formatta gösterilmez. Tam olarak ne olduğunu hatırlayamıyorum ve bazı şeyleri değiştirmek konusunda isteksizim, çünkü şimdi tekrar çalışıyor. – SchmitzIT

+0

2) Bilmiyorum. Ben (en iyi bildiğim kadarıyla), global.asax dışındaki herhangi bir yerde SerializerSettings'e referans veren başka bir kod yok. – SchmitzIT