Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Datenvertragsprogrammiermodell unterstützt vollständig die versionstoleranten Serialisierungsrückrufmethoden, die von den Klassen BinaryFormatter und SoapFormatter unterstützt werden.
Versionstolerante Attribute
Es gibt vier Rückrufattribute. Jedes Attribut kann auf eine Methode angewendet werden, die das Serialisierungs-/Deserialisierungsmodul zu verschiedenen Zeiten aufruft. In der folgenden Tabelle wird erläutert, wann jedes Attribut verwendet werden soll.
| Merkmal | Wenn die entsprechende Methode aufgerufen wird |
|---|---|
| OnSerializingAttribute | Der Aufruf erfolgt vor dem Serialisieren des Typs. |
| OnSerializedAttribute | Der Aufruf erfolgt nach dem Serialisieren des Typs. |
| OnDeserializingAttribute | Der Aufruf erfolgt vor dem Deserialisieren des Typs. |
| OnDeserializedAttribute | Der Aufruf erfolgt nach dem Deserialisieren des Typs. |
Die Methoden müssen einen StreamingContext Parameter akzeptieren.
Diese Methoden sind in erster Linie für die Verwendung mit Versionsverwaltung oder Initialisierung vorgesehen. Während der Deserialisierung werden keine Konstruktoren aufgerufen. Daher können Datenmitglieder möglicherweise nicht ordnungsgemäß auf die vorgesehenen Standardwerte gesetzt werden, wenn die Daten für diese Mitglieder im eingehenden Datenstrom fehlen; zum Beispiel, wenn die Daten aus einer früheren Version eines Typs stammen, bei der einige Datenmitglieder fehlen. Um dies zu korrigieren, verwenden Sie die rückrufmethode, die mit dem OnDeserializingAttribute, wie im folgenden Beispiel dargestellt, gekennzeichnet ist.
Sie können nur eine Methode pro Typ mit jedem der obigen Rückrufattribute markieren.
Beispiel
// 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