SurrogateSelector Klasa

Definicja

Pomaga formaterom w wyborze zastępczej serializacji, aby delegować proces serializacji lub deserializacji do.

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
Dziedziczenie
SurrogateSelector
Pochodne
Atrybuty
Implementuje

Przykłady

Poniższy przykład kodu pokazuje, jak utworzyć klasę zastępczej serializacji, która wie, jak prawidłowo serializować lub deserializować klasę, która nie jest sama serializowalny. Ponadto w tym przykładzie pokazano również, jak odzyskać dane po elemecie 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

Uwagi

Zastępca serializacji daje użytkownikom obiekt, który może obsługiwać wymagania serializacji innego obiektu i może w razie potrzeby przekształcić serializowane dane.

Konstruktory

SurrogateSelector()

Inicjuje nowe wystąpienie klasy SurrogateSelector.

Metody

AddSurrogate(Type, StreamingContext, ISerializationSurrogate)

Dodaje zastępcę do listy zaznaczonych zastępców.

ChainSelector(ISurrogateSelector)

Dodaje określony ISurrogateSelector typ obiektu, który może obsługiwać określony typ obiektu na liście zastępców.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetNextSelector()

Zwraca następny selektor w łańcuchu selektorów.

GetSurrogate(Type, StreamingContext, ISurrogateSelector)

Zwraca zastępcę określonego typu.

GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
RemoveSurrogate(Type, StreamingContext)

Usuwa zastępcę skojarzonego z danym typem.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy