DesignerSerializationManager Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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. |