Aracılığıyla paylaş


Sürüm Toleranslı Seri Hale Getirme Geri Çağrıları

Veri sözleşmesi programlama modeli, ve SoapFormatter sınıflarının desteklediği sürüme dayanıklı serileştirme geri çağırma yöntemlerini BinaryFormatter tam olarak destekler.

Sürüme Dayanıklı Öznitelikler

Dört geri çağırma özniteliği vardır. Her öznitelik, serileştirme/seri durumdan çıkarma altyapısının çeşitli zamanlarda çağıracağı bir yönteme uygulanabilir. Aşağıdaki tabloda her özniteliğin ne zaman kullanılacağı açıklanmaktadır.

Öznitelik İlgili yöntem çağrıldığında
OnSerializingAttribute Türü seri hale getirmeden önce çağrılır.
OnSerializedAttribute Türü seri hale getirildikten sonra çağrılır.
OnDeserializingAttribute Türü seri durumdan çıkarmadan önce çağrılır.
OnDeserializedAttribute Türü seri durumdan çıkardıktan sonra çağrılır.

Yöntemlerin bir StreamingContext parametreyi kabul etmesi gerekir.

Bu yöntemler öncelikle sürüm oluşturma veya başlatma ile kullanılmak üzere tasarlanmıştır. Seri durumdan çıkarma sırasında hiçbir oluşturucu çağrılmaz. Bu nedenle, örneğin veriler bazı veri üyeleri eksik olan bir türün önceki bir sürümünden geliyorsa, bu üyelerin verileri gelen akışta eksikse, veri üyeleri doğru başlatılamayabilir (hedeflenen varsayılan değerlere). Bunu düzeltmek için, aşağıdaki örnekte gösterildiği gibi ile OnDeserializingAttributeişaretlenmiş geri çağırma yöntemini kullanın.

Önceki geri çağırma özniteliklerinin her biriyle tür başına yalnızca bir yöntem işaretleyebilirsiniz.

Örnek

// The following Data Contract is version 2 of an earlier data
// contract.
[DataContract]
public class Address
{
    [DataMember]
    public string Street;

    [DataMember]
    public string State;

    // This data member was added in version 2, and thus may be missing
    // in the incoming data if the data conforms to version 1 of the
    // Data Contract. Use the callback to add a default for this case.
    [DataMember(Order=2)]
    public string CountryRegion;

    // This method is used as a kind of constructor to initialize
    // a default value for the CountryRegion data member before
    // deserialization.
    [OnDeserializing]
    private void setDefaultCountryRegion(StreamingContext c)
    {
        CountryRegion = "Japan";
    }
}
' The following Data Contract is version 2 of an earlier data 
' contract.
<DataContract()> _
Public Class Address
    <DataMember()> _
    Public Street As String
    <DataMember()> _
    Public State As String

    ' This data member was added in version 2, and thus may be missing 
    ' in the incoming data if the data conforms to version 1 of the 
    ' Data Contract.
    <DataMember(Order:=2)> _
    Public CountryRegion As String

    ' This method is used as a kind of constructor to initialize
    ' a default value for the CountryRegion data member before 
    ' deserialization.
    <OnDeserializing()> _
    Private Sub setDefaultCountryRegion(ByVal c As StreamingContext)
        CountryRegion = "Japan"
    End Sub
End Class

Ayrıca bkz.