Sdílet prostřednictvím


DesignerSerializationManager Třída

Definice

Poskytuje implementaci IDesignerSerializationManager rozhraní.

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
Dědičnost
DesignerSerializationManager
Implementuje

Poznámky

Rozhraní IDesignerSerializationManager je navržené tak, aby bylo rozhraní nezávislé na formátu objektu, který řídí serializaci. V podstatě poskytuje kontext a služby serializátorům, které ve skutečnosti provádějí deserializaci. IDesignerSerializationManager pomáhá v procesu deserializace sledováním objektů. To je podobné v technice IDesignerHost rozhraní: návrháři skutečně poskytují uživatelské rozhraní (UI) a IDesignerHost poskytují lepidlo, které umožňuje různým návrhářům spolupracovat.

Třída DesignerSerializationManager implementuje IDesignerSerializationManager. Je navržena tak, aby poskytovala obecnou formu deserializace, která je podobná serializátorům za běhu, jako je .BinaryFormatter

Třída DesignerSerializationManager dosahuje tří cílů:

  • Jedná se o jednoduchý objekt na klíč, který lze použít k deserializaci různých formátů.

  • Je obecný a není svázaný s žádným konkrétním formátem. Lze ji použít stejně pro deserializaci CodeDOM i revizní deserializaci.

  • Je rozšiřitelný a podporuje různé metody serializace, které se používají ve scénářích kopírování/vložení a vrácení zpět/znovu.

Serializace v době návrhu má následující rozdíly od serializace objektu za běhu:

  • Objekt provádějící serializaci je obecně oddělený od objektu za běhu, takže logika návrhu může být odebrána z komponenty.

  • Schéma serializace předpokládá, že objekt bude plně inicializován a poté upraven prostřednictvím vlastnosti a metody vyvolání během deserializace.

  • Vlastnosti objektu, který obsahuje hodnoty, které nebyly nikdy nastaveny na objekt (vlastnosti obsahují výchozí hodnoty), nejsou serializovány. Naopak deserializační proud může mít díry.

  • Důraz je kladen na kvalitu obsahu v rámci serializačního streamu, nikoli na úplné serializace objektu. To znamená, že pokud neexistuje žádný definovaný způsob serializace objektu, může být tento objekt vynechán místo vyvolání výjimky. Modul serializace zde může poskytnout heuristiku, aby se rozhodl, která selhání lze ignorovat a které jsou nerepravitelné.

  • Stream serializace může mít více dat, než je potřeba pro deserializaci. Serializace zdrojového kódu má například uživatelský kód smíšený s kódem potřebným k deserializaci grafu objektu. Tento uživatelský kód musí být ignorován při deserializaci a zachován při serializaci.

Vzhledem k těmto rozdílům platí jiný model serializace pro serializaci v době návrhu. Tento model využívá samostatný objekt serializátoru pro každý datový typ, který je serializován. Každý serializátor poskytuje svůj malý příspěvek k problému jako celku. Tyto serializátory jsou všechny koordinované prostřednictvím společného správce serializace. Správce serializace zodpovídá za udržování stavu mezi těmito různými serializátory. Jako příklad zvažte následující třídu:

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

Instance této třídy by využila tři různé serializátory: jeden pro , jeden pro SampleObjectřetězce a druhý pro celá čísla. Serializátor pro SampleObject se nazývá kořenový serializátor, protože SampleObject je kořenem grafu serializace. Složitější grafy objektů je možné vytvořit také. Představte si například, co by se stalo, kdyby SampleObject se změnilo takto:

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

To umožňuje SampleObject mít dítě, které je další instancí sebe sama. Následující kód vyplní graf objektů:

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

Při root serializaci budou použity čtyři serializátory: jeden kořenový serializátor, jeden serializátor pro podřízený SampleObject, jeden serializátor pro , jeden serializátor pro int, a jeden serializátor pro string. Serializátory jsou uloženy v mezipaměti na základě typu, takže není nutné vytvořit serializátor pro každou instanci SampleObject.

Třída DesignerSerializationManager je založena na myšlence relace serializace. Relace udržuje stav, ke kterému mají přístup různí serializátory. Když je relace uvolněna, tento stav je zničen. To pomáhá zajistit, aby serializátory zůstaly do značné míry bezstavové, a pomáhá vyčistit serializátory, které byly poškozeny. Následující tabulky popisují, jak se stav spravuje v relacích a mezi relacemi.

Globální stav

Tento stav vlastní objekt správce serializace, ale je nezávislý na aktuální serializace relace.

Objekt Využití
Zprostředkovatelé serializace Objekty se můžou přidat jako vlastní zprostředkovatelé serializace. Vzhledem k tomu, že se tito zprostředkovatelé používají k vyhledání serializátorů, prožívají relaci serializace.

Session-Owned State

Tento stav vlastní relace a je zničen při zničení relace. V důsledku toho přístup k jakýmkoli vlastnostem nebo metodám, které by manipulovat s tímto stavem, vyvolá výjimku, pokud správce serializace není v aktivní relaci.

Objekt Využití
událost ResolveName Událost ResolveName je připojena serializátorem, který poskytuje další rozlišení názvů. Při ukončení relace se od této události odpojily všechny obslužné rutiny.
událost SerializationComplete Událost SerializationComplete se vyvolá těsně před odstraněním relace. Potom se všechny obslužné rutiny od této události odpojily.
Tabulka názvů Správce serializace udržuje tabulku, která mapuje mezi objekty a jejich názvy. Serializátory mohou dát názvům objektů pro snadnou identifikaci. Tato tabulka názvů se vymaže při ukončení relace.
Mezipaměť serializátoru Správce serializace udržuje mezipaměť serializátorů, které bylo požádáno o dodání. Tato mezipaměť se vymaže při ukončení relace. Veřejnou GetSerializer metodu lze kdykoli bezpečně volat, ale její hodnota je uložena v mezipaměti pouze v případě, že je volána z relace.
Kontextový zásobník Správce serializace udržuje objekt označovaný jako kontextový zásobník, ke kterému můžete přistupovat pomocí Context vlastnosti. Serializátory mohou použít tento zásobník k ukládání dalších informací, které jsou k dispozici pro jiné serializátory. Například serializátor, který serializuje hodnotu vlastnosti může nasdílit název vlastnosti do zásobníku serializace před dotazem na hodnotu serializovat. Při ukončení relace se tento zásobník vymaže.
Seznam chyb Správce serializace udržuje seznam chyb, ke kterým došlo během serializace. Tento seznam, ke kterému se přistupuje prostřednictvím Errors vlastnosti, se při ukončení relace vymaže. Přístup k Errors vlastnosti mezi relacemi způsobí výjimku.

Konstruktory

Name Description
DesignerSerializationManager()

Inicializuje novou instanci DesignerSerializationManager třídy.

DesignerSerializationManager(IServiceProvider)

Inicializuje novou instanci DesignerSerializationManager třídy s daným poskytovatelem služeb.

Vlastnosti

Name Description
Container

Získá nebo nastaví do kontejneru pro tohoto správce serializace.

Errors

Získá seznam chyb, ke kterým došlo během serializace nebo deserializace.

PreserveNames

Získá nebo nastaví hodnotu určující, zda CreateInstance(Type, ICollection, String, Boolean) metoda má zkontrolovat přítomnost daného názvu v kontejneru.

PropertyProvider

Získá objekt, který by měl být použit k poskytnutí vlastností serializace správce Properties vlastnosti.

RecycleInstances

Získá nebo nastaví hodnotu, která určuje, zda CreateInstance(Type, ICollection, String, Boolean) bude vždy vytvořit novou instanci typu.

ValidateRecycledTypes

Získá nebo nastaví hodnotu, která určuje, zda CreateInstance(Type, ICollection, String, Boolean) metoda ověří, že odpovídající názvy odkazují na stejný typ.

Metody

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

Vytvoří instanci typu.

CreateSession()

Vytvoří novou relaci serializace.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetRuntimeType(String)

Získá typ odpovídající zadanému názvu typu.

GetSerializer(Type, Type)

Získá serializátor pro daný typ objektu.

GetService(Type)

Získá požadovanou službu.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
GetType(String)

Získá požadovaný typ.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
OnResolveName(ResolveNameEventArgs)

ResolveName Vyvolá událost.

OnSessionCreated(EventArgs)

SessionCreated Vyvolá událost.

OnSessionDisposed(EventArgs)

SessionDisposed Vyvolá událost.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Událost

Name Description
SessionCreated

Nastane při vytvoření relace.

SessionDisposed

Nastane, když je relace uvolněna.

Explicitní implementace rozhraní

Name Description
IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

Přidá vlastního zprostředkovatele serializace do správce serializace.

IDesignerSerializationManager.Context

Získá kontextový zásobník pro tuto relaci serializace.

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

Implementuje metodu CreateInstance(Type, ICollection, String, Boolean) .

IDesignerSerializationManager.GetInstance(String)

Načte instanci vytvořeného objektu zadaného názvu.

IDesignerSerializationManager.GetName(Object)

Načte název zadaného objektu.

IDesignerSerializationManager.GetSerializer(Type, Type)

Získá serializátor požadovaného typu pro zadaný typ objektu.

IDesignerSerializationManager.GetType(String)

Získá typ zadaného názvu.

IDesignerSerializationManager.Properties

Implementuje Properties vlastnost.

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

Odebere dříve přidaného zprostředkovatele serializace.

IDesignerSerializationManager.ReportError(Object)

Používá se k hlášení obnovitelné chyby při serializaci.

IDesignerSerializationManager.ResolveName

Nastane, když IDesignerSerializationManager.GetName(Object) nelze najít zadaný název v tabulce názvů správce serializace.

IDesignerSerializationManager.SerializationComplete

Nastane při dokončení serializace.

IDesignerSerializationManager.SetName(Object, String)

Nastaví název zadaného objektu.

IServiceProvider.GetService(Type)

Popis tohoto člena najdete v GetService(Type) metodě.

Platí pro

Viz také