ISerializable Arabirim
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir nesnenin ikili ve XML serileştirme aracılığıyla kendi serileştirmesini ve seri durumdan çıkarılmasını denetlemesine izin verir.
public interface class ISerializable
public interface ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
public interface ISerializable
type ISerializable = interface
[<System.Runtime.InteropServices.ComVisible(true)>]
type ISerializable = interface
Public Interface ISerializable
- Türetilmiş
- Öznitelikler
Açıklamalar
İkili veya XML serileştirme kullanılarak seri hale getirilebilen tüm sınıflar ile SerializableAttributeişaretlenmelidir. Bir sınıfın ikili veya XML serileştirme işlemini denetlemesi gerekiyorsa arabirimini ISerializable uygulayabilir. serileştirme Formatter zamanında öğesini GetObjectData çağırır ve sağlanan SerializationInfo öğesini nesneyi temsil etmek için gereken tüm verilerle doldurur. , Formatter grafikteki nesnenin türüyle bir SerializationInfo oluşturur. Kendileri için proxy göndermesi gereken nesneler, iletilen bilgileri değiştirmek için ve AssemblyName yöntemlerini SerializationInfo kullanabilirFullTypeName.
Sınıf devralma durumunda, uygulayan ISerializablebir temel sınıftan türetilen bir sınıfı seri hale getirmek mümkündür. Bu durumda türetilmiş sınıf, uygulamasının içinde temel sınıf uygulamasını GetObjectDataGetObjectDataçağırmalıdır. Aksi takdirde, temel sınıftaki veriler seri hale getirilmeyecek.
ISerializable arabirimi, imzası constructor (SerializationInfo information, StreamingContext context)
olan bir oluşturucuyu ifade eder. Seri durumdan çıkarma zamanında, geçerli oluşturucu yalnızca içindeki SerializationInfo veriler biçimlendirici tarafından seri durumdan çıkarıldıktan sonra çağrılır. Genel olarak, sınıfı değilse sealed
bu oluşturucu olmalıdırprotected
.
Nesnelerin seri durumdan çıkarılma sırası garanti edilemez. Örneğin, bir tür henüz seri durumdan çıkarılmamış bir türe başvurursa, bir özel durum oluşur. Bu tür bağımlılıklara sahip türler oluşturuyorsanız, arabirimini ve OnDeserialization
yöntemini uygulayarak IDeserializationCallback
soruna geçici bir çözüm bulabilirsiniz.
Serileştirme mimarisi, genişleten türlerle aynı genişleten MarshalByRefObjectObjectnesne türlerini işler. Bu türler ile SerializableAttribute işaretlenebilir ve arabirimini ISerializable başka bir nesne türü olarak uygulayabilir. Nesne durumu yakalanır ve akışta kalıcı hale getirilir.
Bu türler aracılığıyla System.Runtime.Remotingkullanıldığında uzaktan iletişim altyapısı, tipik serileştirmeyi önleyen ve bunun yerine proxy'yi MarshalByRefObjectiçin seri hale getiren bir vekil sağlar. Vekil, belirli bir türdeki nesneleri seri hale getirme ve seri durumdan çıkarma konusunda bilgi sahibi olan bir yardımcıdır. Çoğu durumda kullanıcıya görünmeyen ara sunucu türünde ObjRefolacaktır.
Genel bir tasarım deseni olarak, bir sınıfın hem serializable özniteliğiyle işaretlenmesi hem de kapsamını genişletmesi MarshalByRefObjectolağan dışı olacaktır. Geliştiriciler bu iki özelliği birleştirirken olası serileştirme ve uzaktan iletişim senaryoları hakkında dikkatli düşünmelidir. Bunun uygulanabileceği durumlardan biri ile MemoryStreamolabilir. temel sınıfı MemoryStream (Stream) öğesinden MarshalByRefObjectgenişletilirken, bir MemoryStream durumunu yakalamak ve istediğiniz zaman geri yüklemek mümkündür. Bu nedenle, bu akışın durumunu bir veritabanına seri hale getirmek ve daha sonra geri yüklemek anlamlı olabilir. Ancak, uzaktan iletişim aracılığıyla kullanıldığında, bu tür bir nesne proksied olacaktır.
genişleten MarshalByRefObjectsınıfların seri hale getirilmesi hakkında daha fazla bilgi için bkz RemotingSurrogateSelector. . uygulama ISerializablehakkında daha fazla bilgi için bkz. Özel Serileştirme.
Not
Bu arabirim, kullanarak System.Text.JsonJSON serileştirmesi için geçerli değildir.
Uygulayanlara Notlar
Bir nesnenin kendi serileştirme ve seri durumdan çıkarma işlemine katılmasını sağlamak için bu arabirimi uygulayın.
Yöntemler
GetObjectData(SerializationInfo, StreamingContext) |
Geçersiz.
hedef nesneyi seri hale getirmek için gereken verilerle doldurur SerializationInfo . |