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í je navrženo jako rozhraní nezávislé na formátu pro IDesignerSerializationManager objekt, který řídí serializace. V podstatě poskytuje kontext a služby serializátory, které ve skutečnosti provést deserializaci. IDesignerSerializationManager pomáhá v procesu deserializace udržováním sledování objektů. To se podobá technice rozhraní: návrháři ve skutečnosti poskytují uživatelské rozhraní a polepu, které umožňuje spolupráci různých IDesignerHost IDesignerHost návrhářů.

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ázán s žádným konkrétním formátem. Lze jej použít stejně pro deserializaci objektu CodeDOM i deserializaci značek.

  • 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 runtime, takže logika návrhu lze odebrat z komponenty.

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

  • Vlastnosti objektu, který má hodnoty, které nebyly nikdy nastaveny u objektu (vlastnosti obsahují výchozí hodnoty), nejsou serializovány. Naopak datový proud deserializace může mít otvory.

  • Důraz je kladen na kvalitu obsahu v rámci datového proudu serializace, nikoli úplná serializace objektu. To znamená, že pokud neexistuje žádný definovaný způsob serializace objektu, tento objekt může být přeskočen místo vyvolání výjimky. Serializační modul zde může poskytovat heuristika pro rozhodnutí, která selhání lze ignorovat a která jsou neobsažitelná.

  • Datový proud serializace může mít více dat, než je potřeba pro deserializaci. Například serializace zdrojového kódu obsahuje 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ána při deserializaci a zachována při serializaci.

Z důvodu těchto rozdílů, jiný model serializace platí pro serializaci v době návrhu. Tento model využívá samostatný objekt serializátor pro každý serializovaný datový typ. Každý serializátor poskytuje svůj malý příspěvek k problému jako celku. Všechny tyto serializátory jsou koordinované prostřednictvím běžný správce serializace. Správce serializace je zodpovědný za udržování stavu mezi těmito různými serializátory. Jako příklad si představte 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žívá tři různé serializátory: jeden pro , jeden pro řetězce a druhý SampleObject pro celá čísla. Serializátor pro SampleObject se nazývá kořenový serializátor, protože je kořen grafu SampleObject serializace. Můžete také vytvořit složitější grafy objektů. Představte si například, co by se SampleObject stalo, kdyby 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řízený objekt, který je další instancí sám o sobě. 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

Pokud je serializován, budou použity čtyři serializátory: jeden kořenový serializátor, jeden serializátor pro podřízené , jeden serializátor pro root SampleObject a jeden int 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šlenku relace serializace. Relace udržuje stav, ke kterým mají různé serializátory přístup. Při uvolnění relace je tento stav zničen. To pomáhá zajistit, aby serializátory zůstaly z velké části bez stavu, a pomáhá vyčistit serializátory, které jsou 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í relaci serializace.

Objekt Využití
Zprostředkovatelé serializace Objekty můžete přidat sami jako vlastní zprostředkovatelé serializace. Vzhledem k tomu, že se tyto zprostředkovatelé používají k vyhledání serializátorů, přežijte relace serializace.

Session-Owned stavu

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 manipulovat s tímto stavem vyvolá výjimku, pokud správce serializace není v aktivní relaci.

Objekt Využití
ResolveName Událost Událost ResolveName je připojena serializátorem k poskytnutí dalšího překladu názvů. Při ukončení relace jsou od této události odpojeny všechny obslužné rutiny.
SerializationComplete Událost Událost SerializationComplete je vyvolána těsně před uvolněním relace. Pak 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 vyrušuje.
Mezipaměť serializátoru Správce serializace udržuje mezipaměť serializátorů byl požádán o dodání. Tato mezipaměť se po ukončení relace vyčistí. Veřejnou metodu je možné kdykoli bezpečně volat, ale její hodnota se ukládá do mezipaměti pouze v případě, že je GetSerializer volána v rámci relace.
Zásobník kontextu Správce serializace udržuje objekt s názvem zásobník kontextu, ke kterému můžete přistupovat pomocí Context vlastnosti. Serializátory mohou tento zásobník použít k uložení dalších informací, které jsou k dispozici pro jiné serializátory. Například serializátor, který serializuje hodnotu vlastnosti může nahánět název vlastnosti v zásobníku serializace před dotazem na hodnotu k serializaci. Tento zásobník se po ukončení relace vyškrtá.
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 vlastnosti , se při Errors ukončení relace vyškrtá. Přístup k Errors vlastnosti mezi relacemi bude mít za následek výjimku.

Konstruktory

DesignerSerializationManager()

Inicializuje novou instanci DesignerSerializationManager třídy .

DesignerSerializationManager(IServiceProvider)

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

Vlastnosti

Container

Získá nebo nastaví kontejner 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í, jestli má metoda zkontrolovat přítomnost daného názvu CreateInstance(Type, ICollection, String, Boolean) v kontejneru.

PropertyProvider

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

RecycleInstances

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

ValidateRecycledTypes

Získá nebo nastaví hodnotu, která určuje, zda metoda ověří, zda odpovídající názvy CreateInstance(Type, ICollection, String, Boolean) 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í 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í instanci.

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

Získá požadovaný typ.

MemberwiseClone()

Vytvoří kopii aktuálního seznamu Object .

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

Vyvolá ResolveName událost .

OnSessionCreated(EventArgs)

Vyvolá SessionCreated událost .

OnSessionDisposed(EventArgs)

Vyvolá SessionDisposed událost .

ToString()

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

(Zděděno od Object)

Události

SessionCreated

Vyvolá se při vytvoření relace.

SessionDisposed

Vyvolá se při uvolnění relace.

Explicitní implementace rozhraní

IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

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

IDesignerSerializationManager.Context

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

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

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

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)

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

IDesignerSerializationManager.ResolveName

Vyvolá se v případě, že nelze najít zadaný název v tabulce IDesignerSerializationManager.GetName(Object) názvů správce serializace.

IDesignerSerializationManager.SerializationComplete

Vyvolá se po dokončení serializace.

IDesignerSerializationManager.SetName(Object, String)

Nastaví název zadaného objektu.

IServiceProvider.GetService(Type)

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

Platí pro

Viz také