DesignerSerializationManager Osztály

Definíció

A felület implementálását IDesignerSerializationManager biztosítja.

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
Öröklődés
DesignerSerializationManager
Megvalósítás

Megjegyzések

A IDesignerSerializationManager felület úgy lett kialakítva, hogy formátumfüggetlen felületként szolgáljon egy szerializálást vezérlő objektumhoz. Lényegében kontextust és szolgáltatásokat biztosít a szerializálók számára, amelyek ténylegesen elvégzik a deszerializálást. IDesignerSerializationManager az objektumok nyomon követésével segíti a deszerializálási folyamatot. Ez a felülethez hasonló technika: a IDesignerHost tervezők ténylegesen biztosítják a felhasználói felületet (UI), és IDesignerHost olyan ragasztót biztosítanak, amely lehetővé teszi a különböző tervezők együttműködését.

Az DesignerSerializationManager osztály implementálja .IDesignerSerializationManager Úgy tervezték, hogy a deszerializálás általános formáját biztosítsa, amely hasonló a futásidejű szerializálókhoz, mint a BinaryFormatter.

Az DesignerSerializationManager osztály három célt ér el:

  • Ez egy egyszerű, kulcsrakész objektum, amely különféle formátumok deszerializálására használható.

  • Általános, és nem kötődik semmilyen adott formátumhoz. A CodeDOM deszerializáláshoz és a korrektúra-deszerializáláshoz egyaránt használható.

  • Bővíthető, és támogatja a másolási/beillesztési és visszavonási/ismétlési forgatókönyvekben használt különböző szerializálási módszereket.

A tervezési idő szerializálása a következő különbségeket tartalmazza a futásidejű objektum szerializálásától:

  • A szerializálást végző objektum általában különbözik a futásidejű objektumtól, így a tervezési idő logikája eltávolítható egy összetevőből.

  • A szerializálási séma feltételezi, hogy az objektum teljesen inicializálva lesz, majd tulajdonság- és metódushívásokkal módosul a deszerializálás során.

  • Az olyan objektumok tulajdonságai, amelyeknél az objektumon soha nem beállított értékek vannak beállítva (a tulajdonságok az alapértelmezett értékeket tartalmazzák) nem szerializálva vannak. Ezzel szemben a deszerializálási adatfolyamnak lehetnek lyukai.

  • A hangsúly a szerializálási adatfolyamon belüli tartalom minőségén van, nem pedig az objektumok teljes szerializálásán. Ez azt jelenti, hogy ha nincs definiálva az objektumok szerializálásának módja, az objektum kihagyható ahelyett, hogy kivételt vetítenének ki. A szerializálási motor itt heurisztikusokat biztosíthat annak eldöntéséhez, hogy mely hibákat lehet figyelmen kívül hagyni, és amelyek helyreállíthatatlanok.

  • A szerializálási adatfolyam több adatot tartalmazhat, mint amennyi a deszerializáláshoz szükséges. A forráskód szerializálásához például a felhasználói kód keveredik az objektumdiagram deszerializálásához szükséges kóddal. Ezt a felhasználói kódot figyelmen kívül kell hagyni a deszerializáláson, és meg kell őrizni a szerializáción.

Ezen különbségek miatt egy másik szerializálási modell vonatkozik a tervezési idejű szerializálásra. Ez a modell minden szerializált adattípushoz külön szerializáló objektumot használ. Minden szerializáló kis mértékben hozzájárul a probléma egészéhez. Ezek a szerializálók mindegyike egy közös szerializálási kezelőn keresztül van koordinálva. A szerializálási kezelő felelős a különböző szerializálók állapotának fenntartásáért. Vegyük például a következő osztályt:

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

Az osztály egy példánya három különböző szerializálót használ: egyet sztringekhez SampleObject, egyet pedig egész számokhoz. A szerializálót SampleObject gyökérszerializálónak nevezzük, mert SampleObject a szerializációs gráf gyökere. Összetettebb objektumdiagramok is létrehozhatók. Vegyük például figyelembe, hogy mi történne, ha SampleObject az alábbiak szerint változna:

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

Ez lehetővé teszi SampleObject , hogy egy gyermek, amely egy másik példánya önmagában. A következő kód kitölti az objektumgráfot:

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

Szerializált root állapotban négy szerializálót használunk: egy fő szerializálót, egy szerializálót a gyermekhez SampleObject, egy szerializálót intés egy szerializálót string. A szerializálók a típus alapján gyorsítótárazva vannak, így nem kell szerializálót létrehozni minden példányhoz SampleObject.

Az DesignerSerializationManager osztály egy szerializálási munkamenet ötletén alapul. A munkamenetek olyan állapotot tartanak fenn, amelyet a különböző szerializálók érhetnek el. Amikor egy munkamenetet megsemmisítenek, ez az állapot megsemmisül. Ez segít biztosítani, hogy a szerializálók nagyrészt állapot nélküliek maradjanak, és segít megtisztítani a sérült szerializálókat. Az alábbi táblázatok azt mutatják be, hogyan történik az állapot kezelése a munkamenetekben és a munkamenetek között.

Globális állapot

Ez az állapot a szerializáláskezelő objektum tulajdonában van, de független az aktuális szerializálási munkamenetétől.

Objektum Felhasználás
Szerializálási szolgáltatók Az objektumok egyéni szerializálási szolgáltatókként is hozzáadhatják magukat. Mivel ezek a szolgáltatók szerializálók keresésére szolgálnak, túllépnek egy szerializálási munkameneten.

Session-Owned állapot

Ez az állapot egy munkamenet tulajdonában van, és egy munkamenet megsemmisítésekor megsemmisül. Ennek következtében az állapotot módosító tulajdonságok vagy metódusok elérése kivételt jelent, ha a szerializálás-kezelő nem aktív munkamenetben van.

Objektum Felhasználás
ResolveName esemény Az ResolveName eseményt szerializáló csatolja a nevek további feloldásához. A munkamenet leállásakor minden kezelő le lesz választva erről az eseményről.
SerializationComplete esemény Az SerializationComplete esemény csak a munkamenetek megsemmisítése előtt lesz előállítva. Ezután a rendszer minden kezelőt leválaszt erről az eseményről.
Névtábla A szerializálás-kezelő egy táblát tart fenn, amely az objektumok és a nevük közötti leképezést végzi. A szerializálók az objektumok nevét adhatják meg az egyszerű azonosításhoz. Ez a névtábla törlődik a munkamenet leállásakor.
Szerializáló gyorsítótára A szerializálási kezelő fenntartja azoknak a szerializálóknak a gyorsítótárát, amelyeket a rendszer arra kért, hogy adjon meg. Ez a gyorsítótár törlődik a munkamenet leállásakor. A nyilvános GetSerializer metódus bármikor biztonságosan hívható meg, de az értékét csak akkor gyorsítótárazza a rendszer, ha egy munkameneten belülről hívja meg.
Környezeti verem A szerializálás-kezelő egy környezeti verem nevű objektumot tart fenn, amelyet a Context tulajdonsággal érhet el. A szerializálók ezzel a veremmel további, más szerializálók számára elérhető információkat tárolhatnak. Egy tulajdonságértéket szerializáló szerializáló például leküldheti a tulajdonságnevet a szerializálási verembe, mielőtt az értéket szerializálni szeretné. Ez a verem törlődik a munkamenet leállásakor.
Hibalista A szerializálás-kezelő fenntartja a szerializálás során előforduló hibák listáját. A tulajdonságon keresztül Errors elérhető lista törlődik a munkamenet leállásakor. Errors A munkamenetek közötti tulajdonság elérése kivételt eredményez.

Konstruktorok

Name Description
DesignerSerializationManager()

Inicializálja a DesignerSerializationManager osztály új példányát.

DesignerSerializationManager(IServiceProvider)

Inicializálja az osztály új példányát DesignerSerializationManager az adott szolgáltatóval.

Tulajdonságok

Name Description
Container

Lekéri vagy beállítja a szerializálás-kezelő tárolót.

Errors

Lekéri a szerializálás vagy a deszerializálás során előforduló hibák listáját.

PreserveNames

Lekéri vagy beállít egy értéket, amely jelzi, hogy a CreateInstance(Type, ICollection, String, Boolean) metódusnak ellenőriznie kell-e a megadott név jelenlétét a tárolóban.

PropertyProvider

Lekéri azt az objektumot, amelyet a szerializálás-kezelő tulajdonságának Properties tulajdonságok megadásához kell használni.

RecycleInstances

Lekéri vagy beállít egy értéket, amely jelzi, hogy mindig létrehoz-e CreateInstance(Type, ICollection, String, Boolean) új típusú példányt.

ValidateRecycledTypes

Lekéri vagy beállít egy értéket, amely jelzi, hogy a CreateInstance(Type, ICollection, String, Boolean) metódus ellenőrzi,hogy az egyező nevek ugyanarra a típusra hivatkoznak-e.

Metódusok

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

Létrehoz egy típuspéldányt.

CreateSession()

Új szerializálási munkamenetet hoz létre.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetRuntimeType(String)

Lekéri a megadott típusnévnek megfelelő típust.

GetSerializer(Type, Type)

Lekéri az adott objektumtípus szerializálóját.

GetService(Type)

Lekéri a kért szolgáltatást.

GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
GetType(String)

Lekéri a kért típust.

MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
OnResolveName(ResolveNameEventArgs)

Az eseményt emeli ResolveName ki.

OnSessionCreated(EventArgs)

Az eseményt emeli SessionCreated ki.

OnSessionDisposed(EventArgs)

Az eseményt emeli SessionDisposed ki.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

esemény

Name Description
SessionCreated

Munkamenet létrehozásakor következik be.

SessionDisposed

Akkor fordul elő, ha egy munkamenetet megsemmisítenek.

Explicit interfész-implementációk

Name Description
IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

Egyéni szerializálási szolgáltatót ad hozzá a szerializálás-kezelőhöz.

IDesignerSerializationManager.Context

Lekéri a szerializálási munkamenet környezeti vermét.

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

Implementálja a metódust CreateInstance(Type, ICollection, String, Boolean) .

IDesignerSerializationManager.GetInstance(String)

Lekéri a megadott név egy létrehozott objektumának egy példányát.

IDesignerSerializationManager.GetName(Object)

Lekéri a megadott objektum nevét.

IDesignerSerializationManager.GetSerializer(Type, Type)

Lekéri a kért típus szerializálóját a megadott objektumtípushoz.

IDesignerSerializationManager.GetType(String)

Lekéri a megadott név típusát.

IDesignerSerializationManager.Properties

Implementálja a tulajdonságot Properties .

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

Eltávolít egy korábban hozzáadott szerializálási szolgáltatót.

IDesignerSerializationManager.ReportError(Object)

A szerializálás helyreállítható hibájának jelentésére szolgál.

IDesignerSerializationManager.ResolveName

Akkor fordul elő, ha IDesignerSerializationManager.GetName(Object) a szerializálás-kezelő névtáblájában nem található a megadott név.

IDesignerSerializationManager.SerializationComplete

A szerializálás befejezésekor következik be.

IDesignerSerializationManager.SetName(Object, String)

Beállítja a megadott objektum nevét.

IServiceProvider.GetService(Type)

Ennek a tagnak a leírását a GetService(Type) metódus ismerteti.

A következőre érvényes:

Lásd még