SurrogateSelector SurrogateSelector SurrogateSelector SurrogateSelector Class

定義

シリアル化処理または逆シリアル化処理にデリゲートするシリアル化サロゲートの選択のために、フォーマッタを支援します。Assists formatters in selection of the serialization surrogate to delegate the serialization or deserialization process to.

public ref class SurrogateSelector : System::Runtime::Serialization::ISurrogateSelector
[System.Runtime.InteropServices.ComVisible(true)]
public class SurrogateSelector : System.Runtime.Serialization.ISurrogateSelector
type SurrogateSelector = class
    interface ISurrogateSelector
Public Class SurrogateSelector
Implements ISurrogateSelector
継承
SurrogateSelectorSurrogateSelectorSurrogateSelectorSurrogateSelector
派生
属性
実装

次のコード例は、それ自体がシリアル化できないクラスを適切にシリアル化または逆シリアル化する方法を認識するシリアル化サロゲートクラスを作成する方法を示しています。The following code example shows how to make a serialization surrogate class that knows how to properly serialize or deserialize a class that is not itself serializable. また、この例では、 SerializationExceptionから回復する方法も示しています。In addition, this example also shows how to recover from a SerializationException.

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


// This class is not serializable.
class Employee 
    {
    public String name, address;

    public Employee(String name, String address) 
    {
        this.name = name;
        this.address = address;
    }
}

// This class can manually serialize an Employee object.
sealed class EmployeeSerializationSurrogate : ISerializationSurrogate 
{

    // Serialize the Employee object to save the object's name and address fields.
    public void GetObjectData(Object obj, 
        SerializationInfo info, StreamingContext context) 
    {

        var emp = (Employee) obj;
        info.AddValue("name", emp.name);
        info.AddValue("address", emp.address);
    }

    // Deserialize the Employee object to set the object's name and address fields.
    public Object SetObjectData(Object obj,
        SerializationInfo info, StreamingContext context,
        ISurrogateSelector selector) 
    {

        var emp = (Employee) obj;
        emp.name = info.GetString("name");
        emp.address = info.GetString("address");
        return emp;
    }
}

public sealed class App 
{
    static void Main() 
    {
        // This sample uses the BinaryFormatter.
        IFormatter formatter = new BinaryFormatter();

        // Create a MemoryStream that the object will be serialized into and deserialized from.
        using (Stream stream = new MemoryStream()) 
        {
            // Create a SurrogateSelector.
            var ss = new SurrogateSelector();

            // Tell the SurrogateSelector that Employee objects are serialized and deserialized 
            // using the EmployeeSerializationSurrogate object.
            ss.AddSurrogate(typeof(Employee),
            new StreamingContext(StreamingContextStates.All),
            new EmployeeSerializationSurrogate());

            // Associate the SurrogateSelector with the BinaryFormatter.
            formatter.SurrogateSelector = ss;

            try 
            {
                // Serialize an Employee object into the memory stream.
                formatter.Serialize(stream, new Employee("Jeff", "1 Microsoft Way"));
            }
            catch (SerializationException e) 
            {
                Console.WriteLine("Serialization failed: {0}", e.Message);
                throw;
            }

            // Rewind the MemoryStream.
            stream.Position = 0;

            try 
            {
                // Deserialize the Employee object from the memory stream.
                var emp = (Employee) formatter.Deserialize(stream);

                // Verify that it all worked.
                Console.WriteLine("Name = {0}, Address = {1}", emp.name, emp.address);
            }
            catch (SerializationException e) 
            {
                Console.WriteLine("Deserialization failed: {0}", e.Message);
                throw;
            }
        }
    }
}

// This code produces the following output.
//
// Name = Jeff, Address = 1 Microsoft Way

注釈

シリアル化サロゲートは、別のオブジェクトのシリアル化要件を処理できるオブジェクトをユーザーに提供し、必要に応じてシリアル化されたデータを変換できます。A serialization surrogate gives the users an object that can handle the serialization requirements of a different object and can transform the serialized data if necessary.

コンストラクター

SurrogateSelector() SurrogateSelector() SurrogateSelector() SurrogateSelector()

SurrogateSelector クラスの新しいインスタンスを初期化します。Initializes a new instance of the SurrogateSelector class.

メソッド

AddSurrogate(Type, StreamingContext, ISerializationSurrogate) AddSurrogate(Type, StreamingContext, ISerializationSurrogate) AddSurrogate(Type, StreamingContext, ISerializationSurrogate) AddSurrogate(Type, StreamingContext, ISerializationSurrogate)

確認済みのサロゲートのリストにサロゲートを追加します。Adds a surrogate to the list of checked surrogates.

ChainSelector(ISurrogateSelector) ChainSelector(ISurrogateSelector) ChainSelector(ISurrogateSelector) ChainSelector(ISurrogateSelector)

特定のオブジェクト型を処理できる、指定した ISurrogateSelector をサロゲートのリストに追加します。Adds the specified ISurrogateSelector that can handle a particular object type to the list of surrogates.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetNextSelector() GetNextSelector() GetNextSelector() GetNextSelector()

セレクターのチェインの、次のセレクターを返します。Returns the next selector on the chain of selectors.

GetSurrogate(Type, StreamingContext, ISurrogateSelector) GetSurrogate(Type, StreamingContext, ISurrogateSelector) GetSurrogate(Type, StreamingContext, ISurrogateSelector) GetSurrogate(Type, StreamingContext, ISurrogateSelector)

特定の型のサロゲートを返します。Returns the surrogate for a particular type.

GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
RemoveSurrogate(Type, StreamingContext) RemoveSurrogate(Type, StreamingContext) RemoveSurrogate(Type, StreamingContext) RemoveSurrogate(Type, StreamingContext)

指定した型に関連付けられているサロゲートを削除します。Removes the surrogate associated with a given type.

ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象