Serileştirme
Not
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 | Senaryolar |
---|---|---|
Veri Sözleşmesi Serileştirme | DataContractAttribute DataMemberAttribute DataContractSerializer NetDataContractSerializer DataContractJsonSerializer ISerializable |
Genel kalıcılığı Web Hizmetleri JSON |
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.
Destek için sağ serileştirme teknolojiyi seçmenizde
✔️ 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, türüne ve DataMemberAttribute türünü türün üyelerine (alanlar ve özellikler) uygulayarak DataContractAttribute Veri Sözleşmesi Serileştirmesini destekleyebilir.
✔️ Tür kısmi güvende kullanılabiliyorsa türünüzün veri üyelerini genel olarak işaretlemeyi GÖZ ÖNÜNDE BULUNDURUN.
Tam güven içinde, Veri Sözleşmesi seri hale getiriciler nonpublic türleri ve üyeleri seri hale ve seri durumdan çıkarabilirsiniz, ancak kısmi güvende yalnızca genel üyeler seri hale getirilebilir ve seri durumdan çıkarılabilir.
✔️ DO, sahip DataMemberAttributeolan tüm özelliklerde bir alıcı ve ayarlayıcı uygular. Veri Sözleşmesi seri hale getiricileri, türün hem alıcı hem de ayarlayıcının serileştirilebilir olarak kabul edilmesi gerekir. (.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 , OnSerializingAttributeve OnSerializedAttribute'tirOnDeserializingAttribute. Seri durumundan çıkarma, serileştirme önce ve son olarak seri hale getirme sonra önce sırasıyla 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ılması gereken somut türleri belirtmek için kullanmayı KnownTypeAttribute 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 IExtensibleDataObject farklı sürümleri arasında yuvarlak kopyalamaya izin vermek için uygulamayı GÖZ ÖNÜNDE BULUNDURUN.
Arabirim, seri hale getiricinin yuvarlama sırasında veri kaybı olmamasını sağlar. IExtensibleDataObject.ExtensionData özelliği, geçerli sürümde bilinmeyen türün gelecekteki sürümündeki verileri depolamak için kullanılır ve bu nedenle veri üyelerinde depolayamaz. Geçerli sürüm daha sonra seri hale getirildiğinde ve gelecekteki bir sürümde seri durumdan çıkarıldığında, ek veriler serileştirilmiş akışta kullanılabilir.
XML serileştirme 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.
✔️ IXmlSerializable SERI HALE GETIRILMIŞ XML'in şekli üzerinde XML Serileştirme özniteliklerini uygulayarak sunulandan daha fazla denetim istiyorsanız arabirimi uygulamayı göz önünde bulundurun. ve arabiriminin iki yöntemi, ReadXmlWriteXmlserileştirilmiş XML akışını tam olarak denetlemenize olanak sağlar. Türü için oluşturulan XML şemasını, uygulayarak XmlSchemaProviderAttribute
da denetleyebilirsiniz.
Çalışma zamanı serileştirme 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, uygulanarak SerializableAttributesağlanabilir ve daha gelişmiş senaryolar basit bir Runtime Serializable Deseni (serileştirme oluşturucu uygulama ISerializable ve sağlama) uygulamayı içerir.
✔️ Türleriniz .NET Uzaktan İletişimi ile kullanılacaksa Çalışma Zamanı Serileştirmeyi desteklemeyi GÖZ ÖNÜNDE BULUNDURUN. Ö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, verileri seri hale getirildiği veya seri durumdan çıkarıldığı için dönüştürmek istiyorsanız.
Düzen çok basit yöneliktir. Tek yapmanız gereken arabirimini uygulamak ISerializable ve nesne seri durumdan çıkarıldığında kullanılan özel bir oluşturucu 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 üyeleri ISerializable açıkça uygulayın.
✔️ DO, uygulamaya bir bağlantı talebi ISerializable.GetObjectData uygular. Bu, yalnızca tam olarak güvenilen çekirdek ve Çalışma Zamanı Seri Hale Getiricisi'nin üyeye erişmesini sağlar.
Porsiyonlar © 2005, 2009 Microsoft Corporation. Tüm hakları saklıdır.
Pearson Education, Inc. in Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraryes, 2nd Edition by Krzysztof Cwalina and Brad Abrams izniyle yeniden yazdırıldı ve 22 Ekim 2008'de Addison-Wesley Professional tarafından Microsoft Windows Geliştirme Serisi'nin bir parçası olarak yayımlandı.