匯出 (0) 列印
全部展開
本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文

OnDeserializedAttribute 類別

套用至方法時,指定在還原序列化物件圖形中的物件後立即呼叫該方法。 還原序列化相對於圖形中其他物件的順序不具決定性。

System.Object
  System.Attribute
    System.Runtime.Serialization.OnDeserializedAttribute

命名空間:  System.Runtime.Serialization
組件:  mscorlib (在 mscorlib.dll 中)

[AttributeUsageAttribute(AttributeTargets.Method, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class OnDeserializedAttribute : Attribute

OnDeserializedAttribute 類型會公開下列成員。

  名稱描述
公用方法受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援OnDeserializedAttribute初始化 OnDeserializedAttribute 類別的新執行個體。
回頁首

  名稱描述
公用屬性TypeId在衍生類別中實作時,取得這個 Attribute 的唯一識別項。 (繼承自 Attribute)。
回頁首

  名稱描述
公用方法受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援Equals基礎架構。傳回數值,表示這個執行個體是否等於指定的物件。 (繼承自 Attribute)。
公用方法受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援GetHashCode傳回這個執行個體的雜湊碼。 (繼承自 Attribute)。
公用方法受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援GetType取得目前執行個體的 Type (繼承自 Object)。
公用方法IsDefaultAttribute在衍生類別中覆寫時,表示這個執行個體的值是否為衍生類別的預設值。 (繼承自 Attribute)。
公用方法Match在衍生類別中覆寫時,會傳回值,表示這個執行個體是否等於指定物件。 (繼承自 Attribute)。
公用方法受 可攜式類別庫 支援適用於 Windows 市集應用程式的 .NET支援ToString傳回表示目前物件的字串。 (繼承自 Object)。
回頁首

  名稱描述
明確介面實作私用方法_Attribute.GetIDsOfNames將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。 (繼承自 Attribute)。
明確介面實作私用方法_Attribute.GetTypeInfo擷取物件的型別資訊,可以用來取得介面的型別資訊。 (繼承自 Attribute)。
明確介面實作私用方法_Attribute.GetTypeInfoCount擷取物件提供的型別資訊介面數目 (0 或 1)。 (繼承自 Attribute)。
明確介面實作私用方法_Attribute.Invoke提供物件所公開的屬性和方法的存取權。 (繼承自 Attribute)。
回頁首

對物件進行還原序列化後並在傳回圖形之前,如果需要修復還原序列化物件上的值,可以使用 OnDeserializedAttribute 您可以使用這個屬性,而不要使用 IDeserializationCallback 介面。

若要使用 OnDeserializedAttribute,方法中必須包含 StreamingContext 參數。 屬性標示要由序列化基礎結構呼叫的方法,StreamingContext 則提供正在進行的序列化型別之其他資訊。使用方式如下列程式碼中所示:


[OnDeserialized]
private void SetValuesOnDeserialized(StreamingContext context)
{
    // Code not shown.
}


注意事項注意事項

在程式碼中,您可以使用文字 OnDeserialized 來代替較長的 OnDeserializedAttribute

下列範例將 OnDeserializedAttributeOnSerializingAttributeOnSerializedAttributeOnDeserializingAttribute 屬性,套用至類別 (Class) 中的方法。


using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Test
{
    public static void Main()
    {
        // Create a new TestSimpleObject object.
        TestSimpleObject obj = new TestSimpleObject();

        Console.WriteLine("\n Before serialization the object contains: ");
        obj.Print();

        // Open a file and serialize the object into binary format.
        Stream stream = File.Open("DataFile.dat", FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();

        try
        {
            formatter.Serialize(stream, obj);

            // Print the object again to see the effect of the 
            //OnSerializedAttribute.
            Console.WriteLine("\n After serialization the object contains: ");
            obj.Print();

            // Set the original variable to null.
            obj = null;
            stream.Close();

            // Open the file "DataFile.dat" and deserialize the object from it.
            stream = File.Open("DataFile.dat", FileMode.Open);

            // Deserialize the object from the data file.
            obj = (TestSimpleObject)formatter.Deserialize(stream);

            Console.WriteLine("\n After deserialization the object contains: ");
            obj.Print();
            Console.ReadLine();
        }
        catch (SerializationException se)
        {
            Console.WriteLine("Failed to serialize. Reason: " + se.Message);
            throw;
        }
        catch (Exception exc)
        {
            Console.WriteLine("An exception occurred. Reason: " + exc.Message);
            throw;
        }
        finally
        {
            stream.Close();
            obj = null;
            formatter = null;
        }

    }
}


// This is the object that will be serialized and deserialized.
[Serializable()]
public class TestSimpleObject
{
    // This member is serialized and deserialized with no change.
    public int member1;

    // The value of this field is set and reset during and 
    // after serialization.
    private string member2;

    // This field is not serialized. The OnDeserializedAttribute 
    // is used to set the member value after serialization.
    [NonSerialized()]
    public string member3;

    // This field is set to null, but populated after deserialization.
    private string member4;

    // Constructor for the class.
    public TestSimpleObject()
    {
        member1 = 11;
        member2 = "Hello World!";
        member3 = "This is a nonserialized value";
        member4 = null;
    }

    public void Print()
    {
        Console.WriteLine("member1 = '{0}'", member1);
        Console.WriteLine("member2 = '{0}'", member2);
        Console.WriteLine("member3 = '{0}'", member3);
        Console.WriteLine("member4 = '{0}'", member4);
    }

    [OnSerializing()]
    internal void OnSerializingMethod(StreamingContext context)
    {
        member2 = "This value went into the data file during serialization.";
    }

    [OnSerialized()]
    internal void OnSerializedMethod(StreamingContext context)
    {
        member2 = "This value was reset after serialization.";
    }

    [OnDeserializing()]
    internal void OnDeserializingMethod(StreamingContext context)
    {
        member3 = "This value was set during deserialization";
    }

    [OnDeserialized()]
    internal void OnDeserializedMethod(StreamingContext context)
    {
        member4 = "This value was set after deserialization.";
    }
}

// Output:
//  Before serialization the object contains: 
// member1 = '11'
// member2 = 'Hello World!'
// member3 = 'This is a nonserialized value'
// member4 = ''
//
//  After serialization the object contains: 
// member1 = '11'
// member2 = 'This value was reset after serialization.'
// member3 = 'This is a nonserialized value'
// member4 = ''
//
//  After deserialization the object contains: 
// member1 = '11'
// member2 = 'This value went into the data file during serialization.'
// member3 = 'This value was set during deserialization'
// member4 = 'This value was set after deserialization.'


.NET Framework

支援版本:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0

.NET Framework Client Profile

支援版本:4、3.5 SP1

可攜式類別庫

支援版本:可攜式類別庫

適用於 Windows 市集應用程式的 .NET

支援版本:Windows 8

適用於 Windows Phone 應用程式的 .NET

支援版本:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (不支援伺服器核心角色), Windows Server 2008 R2 (SP1 (含) 以後版本支援伺服器核心角色,不支援 Itanium)

.NET Framework 並不支援各種平台的所有版本。如需支援版本的清單,請參閱.NET Framework 系統需求

這個類型的任何 Public static (在 Visual Basic 中為 Shared) 成員都是安全執行緒。不保證任何執行個體成員是安全執行緒。

社群新增項目

新增
顯示:
© 2015 Microsoft