2010-11-22 18 views
11

Yeni projemde bazı kodları okuyorum ve eski geliştiricinin birlikte Serializable ve DataContract kullanıyor olduğunu öğrendim.Serializable ve DataContract (karşı değil?)

[Serializable] 

ve

[DataContract(Namespace="Some.Name.Space", IsReference = true)] 

bir DataContract nitelik olduğunda WCF Serializable göz ardı eder varsayalım. bu doğru bir varsayım mı? Değilse, hem aynı anda kullanmanın faydaları nelerdir? [DataContract] varsa, [Serializable] Evet, varsa, yok sayılır.

cevap

15

Evet. Bu, örn. WCF için bir seri hale getirme projeksiyonu ve .NET Remoting için başka bir projeksiyon (bir tür WCF ile eski nedenlerle kullanılıyorsa) olacak bir tür oluşturun.

GÜNCELLEME: Her iki [DataContract] ve [Serializable] gerekli nerede Sadece kendi kodunda bir durumla karşılaştım. ASP.NET ViewState'de hem hem de bir ASP.NET Web API'sı JSON uç noktasında (Newtonsoft JSON serileştiricisi ya da kullanan bir ASP.NET Web API JSON uç noktasında kullanmak istediğiniz bir dizi otomatik olarak oluşturulmuş özellikler (örneğin, public int Foo {get; set;}) varsayalım. DataContractSerializer). ViewState'in çalışması için, [Serializable] olmak için sınıfa ihtiyacınız vardır. Ancak, [Serializable] modeli, [Serializable] modelinde JSON serileştirmesini JSON'a {"_k_BackingField123":456} yerine {"_k_BackingField123":456} neden olur, çünkü otomatik olarak oluşturulan özellik destek alanları özellikleri yerine serileştirilir. Ancak, da[DataContract] türüne (ve özelliklerine ilişkin [DataMember]) ekleme yaparsanız, hem ViewState hem de JSON senaryoları mükemmel çalışır. Ayrıntılı açıklama için

+0

teşekkürler. – fizmhd

İlgili konular