次の方法で共有


IDataContractSurrogate.GetDeserializedObject(Object, Type) メソッド

定義

逆シリアル化中に、指定したオブジェクトの代替物であるオブジェクトを返します。

public:
 System::Object ^ GetDeserializedObject(System::Object ^ obj, Type ^ targetType);
public object GetDeserializedObject (object obj, Type targetType);
abstract member GetDeserializedObject : obj * Type -> obj
Public Function GetDeserializedObject (obj As Object, targetType As Type) As Object

パラメーター

obj
Object

置き換えの対象となる逆シリアル化されたオブジェクト。

targetType
Type

置き換えられたオブジェクトに割り当てる Type

戻り値

置き換えられて逆シリアル化されたオブジェクト。 このオブジェクトは、DataContractSerializer によってシリアル化可能な型である必要があります。 たとえば、DataContractAttribute 属性でマークされているか、シリアライザーが認識できる他のメカニズムが使用されている必要があります。

GetDeserializedObject メソッドを実装する例を次に示します。

public object GetDeserializedObject(Object obj , Type targetType)
{
    Console.WriteLine("GetDeserializedObject invoked");
    // This method is called on deserialization.
    // If PersonSurrogated is being deserialized...
    if (obj is PersonSurrogated)
        {
            //... use the XmlSerializer to do the actual deserialization.
            PersonSurrogated ps = (PersonSurrogated)obj;
            XmlSerializer xs = new XmlSerializer(typeof(Person));
            return (Person)xs.Deserialize(new StringReader(ps.xmlData));
        }
        return obj;
}
Public Function GetDeserializedObject(ByVal obj As Object, _
    ByVal targetType As Type) As Object Implements _
    IDataContractSurrogate.GetDeserializedObject
    Console.WriteLine("GetDeserializedObject invoked")
    ' This method is called on deserialization.
    ' If PersonSurrogated is being deserialized...
    If TypeOf obj Is PersonSurrogated Then
        Console.WriteLine(vbTab & "returning PersonSurrogated")
        '... use the XmlSerializer to do the actual deserialization.
        Dim ps As PersonSurrogated = CType(obj, PersonSurrogated)
        Dim xs As New XmlSerializer(GetType(Person))
        Return CType(xs.Deserialize(New StringReader(ps.xmlData)), Person)
    End If
    Return obj

End Function

注釈

単純な実装では、if...then...else 制御構造体を使用して、obj 値がサロゲートされた型であるかどうかをテストできます。 該当する場合は、必要に応じて変換し、置き換えられたオブジェクトを返します。 置き換えられたオブジェクトは、新しいインスタンスになるか、obj インスタンスになることができます。

適用対象