Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Bu içerik, Çerçeve Tasarım Yönergeleri: Kurallar, Deyimler ve Yeniden Kullanılabilir .NET Kitaplıkları için Desenler, 2. Sürüm'den Pearson Education, Inc.'in izniyle yeniden yazdırılır. Bu baskı 2008'de yayımlandı ve kitap o zamandan beri üçüncü baskıda tamamen revize edilmiştir. Bu sayfadaki bazı bilgiler güncel olmayabilir.
Serileştirme, bir nesneyi hazır kalıcı veya taşınabilir bir biçime dönüştürme işlemidir. Örneğin, bir nesneyi serileştirebilir, HTTP kullanarak internet üzerinden taşıyabilir ve hedef makinede seri durumdan çıkarabilirsiniz.
.NET Framework, çeşitli serileştirme senaryoları için iyileştirilmiş üç ana serileştirme teknolojisi sunar. Aşağıdaki tabloda bu teknolojiler ve bu teknolojilerle ilgili ana çerçeve türleri listelenmektedir.
| Teknoloji Adı | Ana Türler | Senaryo |
|---|---|---|
| Veri Sözleşmesi Serileştirme | DataContractAttribute DataMemberAttribute DataContractSerializer NetDataContractSerializer DataContractJsonSerializer ISerializable |
Genel kalıcılık Web Hizmetleri JSON veri formatı |
| XML Serileştirme | XmlSerializer | XML şekli üzerinde tam denetime sahip XML biçimi |
| Çalışma Zamanı Serileştirme (İkili ve SOAP) | SerializableAttribute ISerializable BinaryFormatter SoapFormatter |
.NET uzaktan iletişim |
✔️ Yeni türler tasarlarken serileştirmeyi düşünün.
Desteklenmesi Gereken Doğru Serileştirme Teknolojisini Seçme
✔️ Türünüzün örneklerinin Kalıcı olması veya Web Hizmetleri'nde kullanılması gerekiyorsa Veri Sözleşmesi Serileştirmeyi desteklemeyi GÖZ ÖNÜNDE BULUNDURUN.
✔️ Tür serileştirilirken oluşturulan XML biçimi üzerinde daha fazla denetime ihtiyacınız varsa, Veri Sözleşmesi SeriLeştirmesi yerine veya buna ek olarak XML Serileştirmesini desteklemeyi göz önünde bulundurun.
Bu, örneğin XML öznitelikleri üretmek için Veri Sözleşmesi Serileştirmesi tarafından desteklenmeyen bir XML yapısı kullanmanız gereken bazı birlikte çalışabilirlik senaryolarında gerekli olabilir.
✔️ Türünüzün örneklerinin .NET Uzaktan İletişim sınırları arasında gitmesi gerekiyorsa Çalışma Zamanı Serileştirmesini desteklemeyi göz önünde bulundurun.
❌ Yalnızca genel kalıcılık nedenleriyle Çalışma Zamanı Serileştirme veya XML Serileştirme desteğinden KAÇıNıN. Bunun yerine Veri Sözleşmesi Serileştirmeyi tercih edin.
Veri Sözleşmesi Serileştirmeyi Destekleme
Türler, DataContractAttribute'i türe ve DataMemberAttribute'i türün üyelerine (alanlar ve özellikler) uygulayarak Veri Sözleşmesi Serileştirme'yi destekleyebilir.
✔️ Türünüzün veri üyelerini, tür kısmi güvende kullanılabiliyorsa, açık olarak belirlemeyi GÖZ ÖNÜNDE BULUNDURUN.
Tam güven içinde, Veri Sözleşmesi seri hale getirenler gizli türleri ve üyeleri seri hale getirebilir ve seri durumdan çıkarabilir, ancak kısmi güvende yalnızca genel üyeler seri hale getirilebilir ve seri durumdan çıkarılabilir.
✔️ DataMemberAttribute içeren tüm özellikler için getter ve setter uygulayın. Veri Sözleşmesi serileştiricilerinin, bir türün serileştirilebilir olarak kabul edilebilmesi için hem alıcıya hem de ayarlayıcıya ihtiyacı vardır. (.NET Framework 3.5 SP1'de, bazı koleksiyon özellikleri yalnızca get-only olabilir.) Tür kısmi güvende kullanılmıyorsa özellik erişimcilerinden biri veya her ikisi de nonpublic olabilir.
✔️ Seri durumdan çıkarılmış örneklerin başlatılması için serileştirme geri çağırmalarını kullanmayı GÖZ ÖNÜNDE BULUNDURUN.
Nesneler seri durumdan çıkarıldığında oluşturucular çağrılmaz. (Kuralda özel durumlar vardır. ile CollectionDataContractAttribute işaretlenmiş koleksiyonların oluşturucuları seri durumdan çıkarma sırasında çağrılır.) Bu nedenle, normal yapı sırasında yürütülen herhangi bir mantığın serileştirme geri çağırmalarından biri olarak uygulanması gerekir.
OnDeserializedAttribute en yaygın kullanılan geri çağırma özniteliğidir. Ailedeki diğer öznitelikler OnDeserializingAttribute, OnSerializingAttribute, ve OnSerializedAttribute'tir. Seri durumdan çıkarmadan önce, serileştirmeden önce ve son olarak sırasıyla serileştirmeden sonra yürütülen geri çağırmaları işaretlemek için kullanılabilir.
✔️ Karmaşık bir nesne grafiği seri durumdan çıkarılırken kullanılacak somut türleri belirtmek için KnownTypeAttribute kullanmayı DÜŞÜNÜN.
✔️ Seri hale getirilebilir türler oluştururken veya değiştirirken geriye ve ileriye dönük uyumluluğu göz önünde bulundurun.
Türünüzün gelecekteki sürümlerinin serileştirilmiş akışlarının türün geçerli sürümüne seri durumdan çıkarılabildiğini ve tam tersinin de olabileceğini unutmayın.
Veri sözleşmesi özniteliklerine yönelik açık parametreler kullanılarak sözleşmenin korunmasına özel bir özen gösterilmedikçe, özel ve dahili bile olsa veri üyelerinin adlarını, türlerini ve hatta türün gelecek sürümlerindeki sıralarını değiştiremeyeceklerini anladığınızdan emin olun.
Seri hale getirilebilir türlerde değişiklik yaparken serileştirme uyumluluğunu test edin. Yeni sürümü eski bir sürüme seri durumdan kaldırmayı deneyin(veya tam tersi).
✔️ Türün farklı sürümleri arasında geri ve ileri dönüşüme izin vermek için IExtensibleDataObject uygulamayı DÜŞÜNÜN.
Arayüz, serileştiricinin veri turu sırasında veri kaybı olmamasını sağlar. Gelecek sürümde bilinmeyen türden verileri depolamak için kullanılan IExtensibleDataObject.ExtensionData özelliği, bu verileri mevcut veri üyelerinde saklayamaz. Geçerli sürüm daha sonra serileştirildiğinde ve gelecekteki bir sürümde seri durumdan çıkarıldığında, ek veriler serileştirilmiş akışta mevcut olacaktır.
XML Serileştirmeyi Destekleme
Veri Sözleşmesi Seri Hale Getirme, .NET Framework'teki ana (varsayılan) serileştirme teknolojisidir, ancak Veri Sözleşmesi SeriLeştirme'nin desteklemediği serileştirme senaryoları vardır. Örneğin, seri hale getirici tarafından üretilen veya kullanılan XML şekli üzerinde tam denetim sağlamaz. Böyle bir ince denetim gerekiyorsa, XML Serileştirme kullanılmalıdır ve bu serileştirme teknolojisini desteklemek için türlerinizi tasarlamanız gerekir.
❌ Üretilen XML'nin şeklini denetlemek için çok güçlü bir nedeniniz yoksa, türlerinizi özel olarak XML Serileştirme için tasarlamaktan KAÇıNıN. Bu serileştirme teknolojisinin yerini önceki bölümde açıklanan Veri Sözleşmesi SeriLeştirmesi almıştır.
✔️ XML Serileştirme özniteliklerini uygulayarak sunulandan daha fazla denetim sağlamak istiyorsanız, serileştirilmiş XML'in şekli üzerinde IXmlSerializable arabirimini uygulamayı düşünün. Arabirimin iki yöntemi, ReadXml ve WriteXml, serileştirilmiş XML akışını tam olarak denetlemenize olanak sağlar. Tür için oluşturulan XML şemasını XmlSchemaProviderAttribute'i uygulayarak da kontrol edebilirsiniz.
Çalışma Zamanı Serileştirmeyi Destekleme
Çalışma Zamanı Serileştirme, .NET Uzaktan İletişimi tarafından kullanılan bir teknolojidir. Türlerinizin .NET Uzaktan İletişimi kullanılarak taşınacağını düşünüyorsanız, Çalışma Zamanı Serileştirme'yi desteklediklerinden emin olmanız gerekir.
Çalışma Zamanı Serileştirmesi için temel destek, SerializableAttribute uygulanarak sağlanabilir ve daha gelişmiş senaryolar, basit bir Çalışma Zamanı Serileştirme Deseni uygulamayı (örneğin, ISerializable uygulama ve serileştirme oluşturucusunu sağlama) içerir.
✔️ Türleriniz .NET Uzaktan İletişimi ile kullanılacaksa Çalışma Zamanı Serileştirmeyi desteklemeyi DÜŞÜNÜN. Örneğin, System.AddIn ad alanı .NET Uzaktan İletişimi kullanır ve bu nedenle eklentiler arasında System.AddIn değiştirilen tüm türlerin Çalışma Zamanı Serileştirmeyi desteklemesi gerekir.
✔️ Serileştirme işlemi üzerinde tam denetim istiyorsanız Çalışma Zamanı Seri Hale Getirilebilir Desenini uygulamayı göz önünde bulundurun. Örneğin, veri serileştirilirken veya seriden çıkarılırken dönüştürmek istiyorsanız.
Desen çok basit. Yapmanız gereken tek şey ISerializable arabirimini uygulamak ve nesne seri durumdan çıkarıldığında kullanılan özelleşmiş bir yapıcı sağlamaktır.
✔️ DO, serileştirme oluşturucusunun korunmasını sağlar ve tam olarak burada örnekte gösterildiği gibi yazılan ve adlandırılmış iki parametre sağlar.
[Serializable]
public class Person : ISerializable
{
protected Person(SerializationInfo info, StreamingContext context)
{
// ...
}
}
✔️ DO ISerializable üyelerini açıkça uygulayın.
✔️ DO, ISerializable.GetObjectData uygulamasına bir bağlantı talebi ekleyin. Bu, yalnızca tam olarak güvenilen ana bileşen ve Çalışma Zamanı Seri Hale Getirme'nin üyeye erişimine izin verir.
Porsiyonlar © 2005, 2009 Microsoft Corporation. Tüm hakları saklıdır.
Pearson Education, Inc. tarafından Krzysztof Cwalina ve Brad Abrams'ın Yeniden Kullanılabilir .NET Kütüphaneleri için Çerçeve Tasarım Yönergeleri: Sözleşmeler, Deyimler ve Kalıplar, 2. Baskı eserinden izniyle yeniden basılmıştır. Addison-Wesley Professional tarafından Microsoft Windows Geliştirme Serisi kapsamında 22 Ekim 2008'de yayımlanmıştır.