ISerializable Arabirim

Tanım

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 sealedbu 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 .

Şunlara uygulanır

Ayrıca bkz.