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) |