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ženo 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 tím, že sleduje objekty. To se podobá technice IDesignerHost rozhraní: návrháři ve skutečnosti poskytují uživatelské rozhraní a IDesignerHost poskytují lepidlo, které umožňuje spolupráci různých návrhářů.

Třída DesignerSerializationManager implementuje IDesignerSerializationManager. Je navržen tak, aby poskytoval obecnou formu deserializace, která se podobá serializátorům za běhu, jako BinaryFormatterje .

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í vázán na žádný konkrétní formát. Dá se použít stejně pro deserializaci CodeDOM i pro deserializaci značek.

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

Serializace v době návrhu má následující rozdíly od serializace objektů 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 vytvořen plně inicializován a poté upraven prostřednictvím vlastností a metod vyvolání během deserializace.

  • Vlastnosti objektu, které mají hodnoty, které nebyly nikdy nastaveny pro objekt (vlastnosti obsahují výchozí hodnoty), nejsou serializovány. Naopak, tok deserializace může mít díry.

  • Důraz je kladen na kvalitu obsahu v rámci serializačního streamu, spíše než na úplnou serializaci 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 může poskytnout heuristiky zde rozhodnout, které chyby mohou být ignorovány a které jsou neobnovitelné.

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

Vzhledem k těmto rozdílům se jiný model serializace vztahuje na serializaci v době návrhu. Tento model využívá samostatný objekt serializátoru pro každý datový typ serializovaný. Každý serializátor poskytuje svůj malý příspěvek k problému jako celku. Všechny tyto serializátory jsou koordinovány prostřednictvím běžného správce serializace. Správce serializace je zodpovědný za udržování stavu mezi těmito různými serializátory. Představte si například 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 používala tři různé serializátory: jeden pro SampleObject, jeden pro ř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. Je možné vytvořit i složitější grafy objektů. Zvažte například, co by se stalo, kdyby SampleObject se změnily 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 podřízenou instanci, která je sama o sobě další instancí. Graf objektů vyplní následující kód:

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 se použijí čtyři serializátory: jeden kořenový serializátor, jeden serializátor pro podřízený SampleObject, jeden serializátor pro inta jeden serializátor pro string. Serializátory jsou uloženy v mezipaměti na základě typu, takže není nutné vytvářet serializátor pro každou instanci .SampleObject

Třída DesignerSerializationManager je založena na myšlence serializace relace. Relace udržuje stav, ke kterému mohou přistupovat různé serializátory. Při vyřazení relace je tento stav 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é jsou poškozeny. Následující tabulky popisují, jak se spravuje stav v relacích a mezi relacemi.

Globální stav

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

Objekt Využití
Zprostředkovatelé serializace Objekty se můžou přidávat jako vlastní zprostředkovatele serializace. Vzhledem k tomu, že se tito zprostředkovatelé používají k vyhledání serializátorů, přežijí 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ékoli vlastnosti nebo metody, které by manipulovaly s tímto stavem vyvolá výjimku, pokud serializace správce není v aktivní relaci.

Objekt Využití
ResolveName Událost Událost ResolveName je připojena serializátorem, který poskytuje další překlad názvů. Všechny obslužné rutiny jsou od této události odpojeny, když se relace ukončí.
SerializationComplete Událost Událost SerializationComplete je vyvolána těsně před odstraněním relace. Potom se všechny obslužné rutiny od této události oddělí.
Tabulka názvů Správce serializace udržuje tabulku, která mapuje mezi objekty a jejich názvy. Serializátory mohou dát názvy objektů pro snadnou identifikaci. Tato tabulka názvů se po ukončení relace vymaže.
Mezipaměť serializátoru Správce serializace udržuje mezipaměť serializátorů, které byly vyzvány k dodání. Po ukončení relace se tato mezipaměť vymaže. 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 s názvem 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ílí název vlastnosti v zásobníku serializace před dotazem na hodnotu serializovat. Tento zásobník se vymaže po ukončení relace.
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

DesignerSerializationManager()

Inicializuje novou instanci DesignerSerializationManager třídy.

DesignerSerializationManager(IServiceProvider)

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

Vlastnosti

Container

Získá nebo nastaví kontejner pro tento serializace správce.

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) by metoda měla 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á označuje, zda CreateInstance(Type, ICollection, String, Boolean) bude vždy vytvořit novou instanci typu.

ValidateRecycledTypes

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

Metody

CreateInstance(Type, ICollection, String, Boolean)

Vytvoří instanci typu.

CreateSession()

Vytvoří novou relaci serializace.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

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

Slouží jako výchozí hashovací funkce.

(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á aktuální Type instanci.

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

Získá požadovaný typ.

MemberwiseClone()

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

(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

SessionCreated

Nastane při vytvoření relace.

SessionDisposed

Nastane při vyřazení relace.

Explicitní implementace rozhraní

IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

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

IDesignerSerializationManager.Context

Získá zásobník kontextu pro tuto serializaci relace.

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

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

IDesignerSerializationManager.GetInstance(String)

Načte instanci vytvořeného objektu se zadaným názvem.

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)

Slouží k hlášení obnovitelné chyby v serializaci.

IDesignerSerializationManager.ResolveName

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

IDesignerSerializationManager.SerializationComplete

Nastane po 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é