DesignerSerializationManager Klass

Definition

Tillhandahåller en implementering av IDesignerSerializationManager gränssnittet.

public ref class DesignerSerializationManager : IServiceProvider, System::ComponentModel::Design::Serialization::IDesignerSerializationManager
public class DesignerSerializationManager : IServiceProvider, System.ComponentModel.Design.Serialization.IDesignerSerializationManager
type DesignerSerializationManager = class
    interface IDesignerSerializationManager
    interface IServiceProvider
Public Class DesignerSerializationManager
Implements IDesignerSerializationManager, IServiceProvider
Arv
DesignerSerializationManager
Implementeringar

Kommentarer

Gränssnittet IDesignerSerializationManager är utformat för att vara ett formatoberoende gränssnitt till ett objekt som styr serialisering. Det ger i princip kontext och tjänster till serialiserare, som faktiskt utför deserialiseringen. IDesignerSerializationManager hjälper till med deserialiseringsprocessen genom att hålla reda på objekt. Detta liknar tekniken IDesignerHost i gränssnittet: designers tillhandahåller faktiskt användargränssnittet (UI) och IDesignerHost tillhandahåller limmet som gör att olika designers kan arbeta tillsammans.

Klassen DesignerSerializationManager implementerar IDesignerSerializationManager. Den är utformad för att ge en allmän form av deserialisering som liknar run-time-serialiserare som BinaryFormatter.

Klassen DesignerSerializationManager uppnår tre mål:

  • Det är ett enkelt nyckelfärdigt objekt som kan användas för att deserialisera en mängd olika format.

  • Det är generiskt och inte kopplat till något visst format. Det kan användas lika för CodeDOM-deserialisering samt markeringsdeserialisering.

  • Den är utökningsbar och stöder olika serialiseringsmetoder som används i scenarier för att kopiera/klistra in och ångra/göra om.

Designtidsserialisering har följande skillnader jämfört med serialisering av körningsobjekt:

  • Objektet som utför serialiseringen är vanligtvis skilt från körningsobjektet, så att designtidslogik kan tas bort från en komponent.

  • Serialiseringsschemat förutsätter att objektet kommer att skapas helt initierat och sedan ändras via egenskaps- och metodanrop under deserialisering.

  • Egenskaper för ett objekt som har värden som aldrig har angetts för objektet (egenskaperna innehåller standardvärdena) serialiseras inte. Omvänt kan deserialiseringsströmmen ha hål.

  • Fokus läggs på innehållets kvalitet i serialiseringsströmmen i stället för den fullständiga serialiseringen av ett objekt. Det innebär att om det inte finns något definierat sätt att serialisera ett objekt kan det objektet hoppas över i stället för att utlösa ett undantag. Serialiseringsmotorn kan tillhandahålla heuristik här för att avgöra vilka fel som kan ignoreras och vilka som inte kan återställas.

  • Serialiseringsströmmen kan ha mer data än vad som behövs för deserialisering. Källkodsserialisering har till exempel användarkod blandat med den kod som behövs för att deserialisera ett objektdiagram. Den här användarkoden måste ignoreras vid deserialisering och bevaras vid serialisering.

På grund av dessa skillnader gäller en annan serialiseringsmodell för seriell designtid. Den här modellen använder ett separat serialiserarobjekt för varje datatyp som serialiseras. Varje serialiserare ger sitt lilla bidrag till problemet som helhet. Alla dessa serialiserare koordineras via en gemensam serialiseringshanterare. Serialiseringshanteraren ansvarar för att upprätthålla tillståndet mellan dessa olika serialiserare. Tänk till exempel på följande klass:

public class SampleObject
{
    private string stringValue = null;
    private int intValue = int.MinValue;

    public string StringProperty 
    { 
        get { return this.stringValue; }

        set { this.stringValue = value; }
    }

    public int IntProperty 
    {
        get { return this.intValue; }

        set{ this.intValue = value; }
    }
}
Public Class SampleObject
   Private stringValue As String = Nothing
   Private intValue As Integer = Integer.MinValue
   
   
   Public Property StringProperty() As String
      Get
         Return Me.stringValue
      End Get 
      Set
         Me.stringValue = value
      End Set
   End Property 
   
   Public Property IntProperty() As Integer
      Get
         Return Me.intValue
      End Get 
      Set
         Me.intValue = value
      End Set
   End Property
End Class

En instans av den här klassen skulle använda tre olika serialiserare: en för SampleObject, en för strängar och en annan för heltal. Serialiseraren för SampleObject kallas rot-serialiseraren eftersom SampleObject är roten i serialiseringsdiagrammet. Mer komplexa objektdiagram kan också skapas. Tänk till exempel på vad som skulle hända om SampleObject det ändrades på följande sätt:

public class SampleObject
{
    private string stringValue = null;
    private int intValue = int.MinValue;
    private SampleObject childValue = null;

    public string StringProperty
    {
        get { return this.stringValue; }

        set { this.stringValue = value; }
    }

    public int IntProperty
    {
        get { return this.intValue; }

        set { this.intValue = value; }
    }

    public SampleObject Child
    {
        get { return this.childValue; }

        set { this.childValue = value; }
    }
}
Public Class SampleObject
   Private stringValue As String = Nothing
   Private intValue As Integer = Integer.MinValue
   Private childValue As SampleObject = Nothing
   
   
   Public Property StringProperty() As String
      Get
         Return Me.stringValue
      End Get 
      Set
         Me.stringValue = value
      End Set
   End Property 
   
   Public Property IntProperty() As Integer
      Get
         Return Me.intValue
      End Get 
      Set
         Me.intValue = value
      End Set
   End Property 
   
   Public Property Child() As SampleObject
      Get
         Return Me.childValue
      End Get 
      Set
         Me.childValue = value
      End Set
   End Property
End Class

Detta gör det möjligt SampleObject att ha ett underordnat objekt som är en annan instans av sig själv. Följande kod fyller i objektdiagrammet:

class Program
{
    static void Main(string[] args)
    {
        SampleObject root = new SampleObject();

        SampleObject currentObject = root;

        for (int i = 0; i < 10; i++)
        {
            SampleObject o = new SampleObject();

            currentObject.Child = o;

            currentObject = o;
        }
    }
}
Class Program
   
   Public Overloads Shared Sub Main()
      Main(System.Environment.GetCommandLineArgs())
   End Sub
   
   Overloads Shared Sub Main(args() As String)
      Dim root As New SampleObject()
      
      Dim currentObject As SampleObject = root
      
      Dim i As Integer
      For i = 0 To 9
         Dim o As New SampleObject()
         
         currentObject.Child = o
         
         currentObject = o
      Next i
   End Sub 
End Class

När root serialiseras används fyra serialiserare: en rotserialiserare, en serialiserare för det underordnade SampleObject, en serialiserare för intoch en serialiserare för string. Serialiserare cachelagras baserat på typ, så du behöver inte skapa en serialiserare för varje instans av SampleObject.

Klassen DesignerSerializationManager baseras på idén om en serialiseringssession. En session upprätthåller tillstånd som kan nås av de olika serialiserarna. När en session tas bort förstörs det här tillståndet. Detta hjälper till att säkerställa att serialiserare förblir i stort sett tillståndslösa och hjälper till att rensa serialiserare som har skadats. I följande tabeller beskrivs hur tillstånd hanteras i och bland sessioner.

Globalt tillstånd

Det här tillståndet ägs av serialiseringshanterarens objekt, men är oberoende av den aktuella serialiseringssessionen.

Object Usage
Serialiseringsproviders Objekt kan lägga till sig själva som anpassade serialiseringsproviders. Eftersom dessa leverantörer används för att hitta serialiserare, överlever de en serialiseringssession.

Session-Owned tillstånd

Det här tillståndet ägs av en session och förstörs när en session förstörs. Därför utlöser åtkomst till alla egenskaper eller metoder som skulle manipulera det här tillståndet ett undantag om serialiseringshanteraren inte är i en aktiv session.

Object Usage
ResolveName evenemang Händelsen ResolveName bifogas av en serialiserare för att ge ytterligare namnmatchning. Alla hanterare kopplas från den här händelsen när en session avslutas.
SerializationComplete evenemang Händelsen SerializationComplete utlöses precis innan en session tas bort. Sedan kopplas alla hanterare från den här händelsen.
Namntabell Serialiseringshanteraren har en tabell som mappar mellan objekt och deras namn. Serialiserare kan ge objektnamn för enkel identifiering. Den här namntabellen rensas när sessionen avslutas.
Serialiserarcache Serialiseringshanteraren har en cache med serialiserare som den har blivit ombedd att ange. Cacheminnet rensas när sessionen avslutas. Den offentliga GetSerializer metoden kan anropas när som helst, men dess värde cachelagras endast om den anropas inifrån en session.
Kontextstack Serialiseringshanteraren underhåller ett objekt som kallas kontextstacken, som du kan komma åt med Context egenskapen. Serialiserare kan använda den här stacken för att lagra ytterligare information som är tillgänglig för andra serialiserare. Till exempel kan en serialiserare som serialiserar ett egenskapsvärde skicka egenskapsnamnet på serialiseringsstacken innan du ber värdet att serialisera. Den här stacken rensas när sessionen avslutas.
Fellistor Serialiseringshanteraren har en lista över fel som inträffade under serialiseringen. Den här listan, som nås via Errors egenskapen, rensas när sessionen avslutas. Åtkomst till Errors egenskapen mellan sessioner resulterar i ett undantag.

Konstruktorer

Name Description
DesignerSerializationManager()

Initierar en ny instans av DesignerSerializationManager klassen.

DesignerSerializationManager(IServiceProvider)

Initierar en ny instans av DesignerSerializationManager klassen med den angivna tjänstleverantören.

Egenskaper

Name Description
Container

Hämtar eller ställer in till containern för den här serialiseringshanteraren.

Errors

Hämtar listan över fel som inträffade under serialisering eller deserialisering.

PreserveNames

Hämtar eller anger ett värde som anger om CreateInstance(Type, ICollection, String, Boolean) metoden ska söka efter förekomsten av det angivna namnet i containern.

PropertyProvider

Hämtar det objekt som ska användas för att ange egenskaper för serialiseringshanterarens Properties egenskap.

RecycleInstances

Hämtar eller anger ett värde som anger om CreateInstance(Type, ICollection, String, Boolean) alltid skapar en ny instans av en typ.

ValidateRecycledTypes

Hämtar eller anger ett värde som anger om CreateInstance(Type, ICollection, String, Boolean) metoden ska verifiera att matchande namn refererar till samma typ.

Metoder

Name Description
CreateInstance(Type, ICollection, String, Boolean)

Skapar en instans av en typ.

CreateSession()

Skapar en ny serialiseringssession.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetRuntimeType(String)

Hämtar den typ som motsvarar det angivna typnamnet.

GetSerializer(Type, Type)

Hämtar serialiseraren för den angivna objekttypen.

GetService(Type)

Hämtar den begärda tjänsten.

GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
GetType(String)

Hämtar den begärda typen.

MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
OnResolveName(ResolveNameEventArgs)

Genererar händelsen ResolveName .

OnSessionCreated(EventArgs)

Genererar händelsen SessionCreated .

OnSessionDisposed(EventArgs)

Genererar händelsen SessionDisposed .

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Händelser

Name Description
SessionCreated

Inträffar när en session skapas.

SessionDisposed

Inträffar när en session tas bort.

Explicita gränssnittsimplementeringar

Name Description
IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

Lägger till en anpassad serialiseringsprovider till serialiseringshanteraren.

IDesignerSerializationManager.Context

Hämtar kontextstacken för den här serialiseringssessionen.

IDesignerSerializationManager.CreateInstance(Type, ICollection, String, Boolean)

Implementerar CreateInstance(Type, ICollection, String, Boolean) metoden.

IDesignerSerializationManager.GetInstance(String)

Hämtar en instans av ett skapat objekt med det angivna namnet.

IDesignerSerializationManager.GetName(Object)

Hämtar ett namn för det angivna objektet.

IDesignerSerializationManager.GetSerializer(Type, Type)

Hämtar en serialiserare av den begärda typen för den angivna objekttypen.

IDesignerSerializationManager.GetType(String)

Hämtar en typ av angivet namn.

IDesignerSerializationManager.Properties

Implementerar egenskapen Properties .

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

Tar bort en tidigare tillagd serialiseringsprovider.

IDesignerSerializationManager.ReportError(Object)

Används för att rapportera ett återställningsbart fel i serialiseringen.

IDesignerSerializationManager.ResolveName

Inträffar när IDesignerSerializationManager.GetName(Object) det inte går att hitta det angivna namnet i serialiseringshanterarens namntabell.

IDesignerSerializationManager.SerializationComplete

Inträffar när serialiseringen är klar.

IDesignerSerializationManager.SetName(Object, String)

Anger namnet på det angivna objektet.

IServiceProvider.GetService(Type)

En beskrivning av den här medlemmen finns i GetService(Type) metoden .

Gäller för

Se även