2012-11-07 22 views
12

[Serializable] ile işaretlenmiş bir sınıfa sahibim. Web API’ndan döndüğümde alan isimleri tamamen korkak. ASP.NET Web API'si ve [Serializable] sınıfı

Normalde JSON geri o seri önbelleğe alma için bir BinaryFormatter kullanımı işaretlemek için istemek
[{"<OrderId>k__BackingField":797 ... 

[Serializable]

kullanıldığında

[{"OrderId":797 ... 

JSON döndürülmektedir. Özel bir seri hale getirici yazmak veya seri hale getirilemez bir ikiz sınıf yapmak ve iki arasında "döküm" için maymun kodu yazmak için başka bir yolu var mı?

sizin için daha iyi bir çözüm kurtulmak için olabilir
((DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.ContractResolver).IgnoreSerializableAttribute = true; 

tamamen kullanılarak [Serializable] durdurmak:

+0

İkili biçimlendirici önbelleklemeye nasıl yardımcı olur? – DarthVader

+0

Siparişler harici bir sistemden geliyor ve tüm siparişlerin API'sı aracılığıyla sıfırdan başlaması 10 saniye sürüyor. Son önbelleğe alınmış tarih ve geçerli tarih arasındaki siparişleri almak, bir önbellekte saklamak ve sonra tam listeyi döndürmek çok daha hızlıdır. – Malako

+1

JSON.net [Web API'sında kullanılan varsayılan JSON serileştirme kitaplığı] ile bir sınırlamadır. Bunu görün - http://stackoverflow.com/questions/10143420/why-does-json-net-serialization-fail-with-serializable-and-a-lambda-inside-a-r. JSON.NET'in en son sürümünü kullanmayı deneyebilir veya bir şeyler önbelleğe almanın başka bir yolunu bulabilirsiniz. – Suhas

cevap

21

Sadece Json.NET tekrar [Serializable] anlambilimini görmezden almak için bu tek astarına ihtiyacı BinaryFormatter ve bunun yerine, Json.NET serializer gibi, yapmak istediğiniz tüm önbellekleri yapmak için farklı bir serializer kullanın.

+0

Teşekkürler! JsonFormatter için iyi çalışıyor, ama daha genel bir yolu var mı? Json, JsonP ve Xml isteyen müşterilerim var. – Malako

+1

Hayır, yok. Her formatlayıcı [Serializable] işleminin kendi yöntemiyle nasıl kullanılacağını seçmekte özgürdür. Varsayılan XmlFormatter [Serializable] öğesini tanır, ancak bundan kaçınmak için XmlSerializer'a geçebilirsiniz. Sizin için daha iyi bir çözüm, [Seri hale getirilebilir] 'den kurtulmak, BinaryFormatter'ı kullanmayı bırakmak ve bunun yerine, Json.NET serializer gibi, yapmak istediğiniz tüm önbellekleri yapmak için farklı bir serializer kullanmak olabilir. –

+1

Json.NET serializer'ı önerdiğiniz gibi kullanarak bitirdim. Performans, BinaryFormatter kadar iyidir ve [Serializable] özniteliğine gerek yoktur. Bir cevap verin ve kredinizi alacaksınız. Teşekkürler! – Malako