SurrogateSelector Classe

Definição

Auxilia formatadores na seleção do substituto da serialização ao qual delegar o processo de serialização ou desserialização.Assists formatters in selection of the serialization surrogate to delegate the serialization or deserialization process to.

public ref class SurrogateSelector : System::Runtime::Serialization::ISurrogateSelector
public class SurrogateSelector : System.Runtime.Serialization.ISurrogateSelector
[System.Runtime.InteropServices.ComVisible(true)]
public class SurrogateSelector : System.Runtime.Serialization.ISurrogateSelector
type SurrogateSelector = class
    interface ISurrogateSelector
[<System.Runtime.InteropServices.ComVisible(true)>]
type SurrogateSelector = class
    interface ISurrogateSelector
Public Class SurrogateSelector
Implements ISurrogateSelector
Herança
SurrogateSelector
Derivado
Atributos
Implementações

Exemplos

O exemplo de código a seguir mostra como criar uma classe alternativa de serialização que sabe como serializar ou desserializar corretamente uma classe que não é serializável por si só.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. Além disso, este exemplo também mostra como recuperar de um 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

Comentários

Um substituto de serialização fornece aos usuários um objeto que pode manipular os requisitos de serialização de um objeto diferente e pode transformar os dados serializados, se necessário.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.

Construtores

SurrogateSelector()

Inicializa uma nova instância da classe SurrogateSelector.Initializes a new instance of the SurrogateSelector class.

Métodos

AddSurrogate(Type, StreamingContext, ISerializationSurrogate)

Adiciona um substituto à lista de substitutos verificados.Adds a surrogate to the list of checked surrogates.

ChainSelector(ISurrogateSelector)

Adiciona o ISurrogateSelector especificado que pode lidar com um tipo de objeto específico à lista de substitutos.Adds the specified ISurrogateSelector that can handle a particular object type to the list of surrogates.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetNextSelector()

Retorna o próximo seletor na cadeia de seletores.Returns the next selector on the chain of selectors.

GetSurrogate(Type, StreamingContext, ISurrogateSelector)

Retorna o substituto de um determinado tipo.Returns the surrogate for a particular type.

GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
RemoveSurrogate(Type, StreamingContext)

Remove do substituto associado com um determinado tipo.Removes the surrogate associated with a given type.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)

Aplica-se a