2011-08-31 17 views
12

[DataContract] ve [DataMember] özniteliklerini biraz dağınık buluyorum ve bunu bir yapılandırma yönteminde veya bir şeyde kodla yapmayı tercih ediyorum. Mümkün mü?Tüm Öznitelikler Olmadan DataContract ve DataMember Ayarlama

+4

Bir ön cephe dekorasyonuyla ilgili karışıklık nedir? –

+0

Nasıl cevap verileceğinden emin değil. Sadece dağınık. –

+3

Çok fazla varlığım var ve çoğunlukla tüm özellikleri dahil olmak üzere hepsini genişletmek istiyorum, bu yüzden yüzlerce kez bir özelliği tekrarlamak zahmetli geliyor. Ladislov'un aşağıda bana yardımcı olduğu "dışlama" yaklaşımını anlamaya çalışıyorum. Eklemek istediğim üyeleri dekore etmeyi tercih ederim. –

cevap

14

Bu özellikleri kullanmak zorunda değilsiniz. DataContractSerializer, tüm ortak özellikleri getter ve ayarlayıcı ile serileştirir, ancak gezinme özellikleri olan serileştirme varlıkları durumunda, "döngüsel referans" nedeniyle istisna ile kolayca sonlanır.

ya sen serilize veya seri hale getirmek istemiyoruz her mülkiyet IgnoreDataMember istediğiniz her mülk üzerinde DataMember ile varlık sınıfı [DataContract(IsReference = true)] kullanması gerektiğini istisna kaçının.

Son ve en karmaşık seçenek, öznitelikleri tamamen engellemekten ve türün dışında serileştirmeyi denetlemek için IDataContractSurrogate uygulayan özel sınıflardır.

Ayrıca, tamamen özel seri hale getirme işleminizi yazabilir veya tüm gereksinimlerini içeren XML serileştirme veya ikili serileştirme kullanabilirsiniz.

+2

Ama dersime [DataContract] ekledim ve bunu bir WCF işleminden döndürebiliyorum ... ancak içerikler boş, bu yüzden bir kaç özelliğe [DataMember] ekledim ve aniden bu (ve yalnızca o olanlar) serileştirilmiş sonuçta döndü. Öyleyse neden varsayılan olarak tüm özellikler iade edildiğini söylediğiniz gibi benimki çalışmıyor? –

+0

BTW, {get; set;} –

+5

'DataContract' özniteliğini ekledikten sonra **, DataMember' özniteliği ile serileştirmek istediğiniz özellikleri işaretlemelidir. Tanımladığım varsayılan serileştirme, yalnızca 'DataContract' özniteliğini kullanmıyorsanız çalışır. –

1

Hayır, DataContractSerializer bir opt-in serileştiricisidir - ne dahil istediğinizi belirtmeniz gerekir.

Diğer serileştiricilerle, serileştiriciye işleri yalnız bırakmak için NonSerializedAttribute veya XmlIgnoreAttribute gibi şeyleri kullanmanız gerekir.

İlgili konular