Aracılığıyla paylaş


DesignerSerializationManager Sınıf

Tanım

Arabirimin IDesignerSerializationManager bir uygulamasını sağlar.

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
Devralma
DesignerSerializationManager
Uygulamalar

Açıklamalar

Arabirim IDesignerSerializationManager , serileştirmeyi denetleen bir nesneye biçimden bağımsız bir arabirim olacak şekilde tasarlanmıştır. Seri durumdan çıkarma işlemini gerçekleştiren seri hale getiricilere bağlam ve hizmetler sağlar. IDesignerSerializationManager nesneleri takip ederek seri durumdan çıkarma işlemine yardımcı olur. Bu, arabirime IDesignerHost benzer bir tekniktir: tasarımcılar aslında kullanıcı arabirimini (UI) sağlar ve IDesignerHost farklı tasarımcıların birlikte çalışmasını sağlayan tutkal sağlar.

DesignerSerializationManager sınıfı IDesignerSerializationManager uygular. gibi çalışma zamanı serileştiricilerine BinaryFormatterbenzer genel bir seri durumdan çıkarma biçimi sağlamak için tasarlanmıştır.

DesignerSerializationManager sınıfı üç hedefe ulaşır:

  • Çeşitli biçimleri seri durumdan çıkarmak için kullanılabilecek basit, anahtar teslimi bir nesnedir.

  • Geneldir ve belirli bir biçime bağlı değildir. CodeDOM seri durumdan çıkarma ve işaretleme seri durumdan çıkarma için eşit olarak kullanılabilir.

  • Genişletilebilir ve kopyalama/yapıştırma ve geri alma/yineleme senaryolarında kullanılan farklı serileştirme yöntemlerini destekler.

Tasarım zamanı serileştirmesi, çalışma zamanı nesne serileştirmesinden aşağıdaki farklılıklara sahiptir:

  • Serileştirmeyi gerçekleştiren nesne genellikle çalışma zamanı nesnesinden ayrıdır, böylece tasarım zamanı mantığı bir bileşenden kaldırılabilir.

  • Serileştirme düzeni, nesnenin tamamen başlatılacağını ve seri durumdan çıkarma sırasında özellik ve yöntem çağrıları aracılığıyla değiştirileceğini varsayar.

  • Hiçbir zaman nesne üzerinde ayarlanmamış değerlere sahip bir nesnenin özellikleri (özellikler varsayılan değerleri içerir) serileştirilmemiştir. Buna karşılık seri durumdan çıkarma akışında delikler olabilir.

  • Bir nesnenin tam seri hale getirilmesi yerine serileştirme akışındaki içeriğin kalitesine vurgu yapılır. Başka bir deyişle, bir nesneyi seri hale getirmenin tanımlı bir yolu yoksa, bu nesne özel durum oluşturma yerine atlanabilir. Serileştirme altyapısı, hangi hataların yoksayılabilir ve hangilerinin kurtarılamaz olduğunu belirlemek için burada buluşsal yöntemler sağlayabilir.

  • Seri hale getirme akışı seri durumdan çıkarma için gerekenden daha fazla veriye sahip olabilir. Örneğin kaynak kodu serileştirmesinde kullanıcı kodu, nesne grafiğinin seri durumdan çıkarılması için gereken kodla karıştırılır. Bu kullanıcı kodu seri durumdan çıkarmada yoksayılmalıdır ve serileştirmede korunmalıdır.

Bu farklılıklar nedeniyle, tasarım zamanı serileştirmesi için farklı bir serileştirme modeli uygulanır. Bu model, seri hale getirilen her veri türü için ayrı bir seri hale getirici nesnesi kullanır. Her seri hale getirici, soruna bir bütün olarak küçük katkı sağlar. Bu seri hale getiricilerin tümü ortak bir serileştirme yöneticisi aracılığıyla koordine edilir. Serileştirme yöneticisi, bu farklı seri hale getiriciler arasındaki durumu korumakla sorumludur. Örneğin, aşağıdaki sınıfı göz önünde bulundurun:

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

Bu sınıfın bir örneği üç farklı seri hale getirici kullanır: biri için SampleObject, biri dizeler için, diğeri tamsayılar için. seri hale getirme grafiğinin kökü olduğundan SampleObject için SampleObject seri hale getirici kök seri hale getirici olarak adlandırılır. Daha karmaşık nesne grafikleri de oluşturulabilir. Örneğin, aşağıdaki gibi değiştirildiğinde ne olacağını SampleObject göz önünde bulundurun:

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

Bu, kendisinin başka bir örneği olan bir çocuğun olmasını sağlar SampleObject . Aşağıdaki kod nesne grafını doldurur:

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

Seri hale getirildiğinde root , dört seri hale getirici kullanılır: bir kök serileştirici, alt SampleObjectiçin bir seri hale getirici, için intbir seri hale getirici ve için stringbir seri hale getirici. Seri hale getiriciler türüne göre önbelleğe alınır, bu nedenle her örneği SampleObjectiçin bir seri hale getirici oluşturmanıza gerek yoktur.

DesignerSerializationManager sınıfı, serileştirme oturumu fikrini temel alır. Bir oturum, çeşitli seri hale getiriciler tarafından erişilebilen durumu korur. Bir oturum atıldığında, bu durum yok edilir. Bu, seri hale getiricilerin büyük ölçüde durum bilgisi olmayan kalmasını sağlamaya yardımcı olur ve bozuk seri hale getiricileri temizlemeye yardımcı olur. Aşağıdaki tablolarda, durumun oturumlarda ve oturumlar arasında nasıl yönetildiğini açıklanmaktadır.

Genel Durum

Bu durum serileştirme yöneticisi nesnesine aittir, ancak geçerli serileştirme oturumundan bağımsızdır.

Nesne Kullanım
Serileştirme sağlayıcıları Nesneler kendilerini özel serileştirme sağlayıcıları olarak ekleyebilir. Bu sağlayıcılar seri hale getiricileri bulmak için kullanıldığından, bir serileştirme oturumundan daha uzun yaşarlar.

Session-Owned Durumu

Bu durum bir oturuma aittir ve bir oturum yok edildiğinde yok edilir. Sonuç olarak, serileştirme yöneticisi etkin bir oturumda değilse, bu durumu işleyecek özelliklere veya yöntemlere erişmek bir özel durum oluşturur.

Nesne Kullanım
ResolveName etkinlik Olay ResolveName , adların ek çözümlemesini sağlamak için bir seri hale getirici tarafından eklenir. Bir oturum sonlandırıldığında tüm işleyiciler bu olaydan ayrılır.
SerializationComplete etkinlik Olay SerializationComplete , bir oturum atılmadan hemen önce oluşturulur. Ardından, tüm işleyiciler bu olaydan ayrılır.
Ad tablosu Serileştirme yöneticisi, nesneler ve adları arasında eşleyen bir tablo tutar. Seri hale getiriciler kolay tanımlama için nesnelere ad verebilir. Oturum sonlandırıldığında bu ad tablosu temizlenir.
Seri hale getirici önbelleği Serileştirme yöneticisi, sağlaması istenen seri hale getiricilerin önbelleğini tutar. Oturum sonlandırıldığında bu önbellek temizlenir. Ortak GetSerializer yöntem herhangi bir zamanda güvenli bir şekilde çağrılabilir, ancak değeri yalnızca bir oturum içinden çağrılırsa önbelleğe alınır.
Bağlam yığını Serileştirme yöneticisi, bağlam yığını olarak adlandırılan ve özelliğiyle erişebileceğiniz bir nesne tutar Context . Seri hale getiriciler, diğer seri hale getiriciler için kullanılabilen ek bilgileri depolamak için bu yığını kullanabilir. Örneğin, bir özellik değerini seri hale getiren bir seri hale getirici, değerin seri hale getirilmesini istemeden önce özellik adını serileştirme yığınına gönderebilir. Oturum sonlandırıldığında bu yığın temizlenir.
Hata listesi Serileştirme yöneticisi, serileştirme sırasında oluşan hataların listesini tutar. Özelliği aracılığıyla Errors erişilen bu liste, oturum sonlandırıldığında temizlenir. Errors Oturumlar arasında özelliğe erişmek bir özel durumla sonuçlanır.

Oluşturucular

Name Description
DesignerSerializationManager()

DesignerSerializationManager sınıfının yeni bir örneğini başlatır.

DesignerSerializationManager(IServiceProvider)

Verilen hizmet sağlayıcısıyla sınıfının yeni bir örneğini DesignerSerializationManager başlatır.

Özellikler

Name Description
Container

Bu serileştirme yöneticisi için kapsayıcıyı alır veya ayarlar.

Errors

Serileştirme veya seri durumdan çıkarma sırasında oluşan hataların listesini alır.

PreserveNames

Yöntemin kapsayıcıda belirtilen adın CreateInstance(Type, ICollection, String, Boolean) varlığını denetlemesi gerekip gerekmediğini belirten bir değer alır veya ayarlar.

PropertyProvider

Serileştirme yöneticisinin Properties özelliğine özellik sağlamak için kullanılması gereken nesneyi alır.

RecycleInstances

Her zaman yeni bir tür örneği oluşturup oluşturmayacağını CreateInstance(Type, ICollection, String, Boolean) belirten bir değer alır veya ayarlar.

ValidateRecycledTypes

Yöntemin eşleşen adların CreateInstance(Type, ICollection, String, Boolean) aynı türe başvurduğunu doğrulayıp doğrulamayacağını belirten bir değer alır veya ayarlar.

Yöntemler

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

Türün bir örneğini oluşturur.

CreateSession()

Yeni bir serileştirme oturumu oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetRuntimeType(String)

Belirtilen tür adına karşılık gelen türü alır.

GetSerializer(Type, Type)

Verilen nesne türü için seri hale getiriciyi alır.

GetService(Type)

İstenen hizmeti alır.

GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
GetType(String)

İstenen türü alır.

MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
OnResolveName(ResolveNameEventArgs)

Olayı tetikler ResolveName .

OnSessionCreated(EventArgs)

Olayı tetikler SessionCreated .

OnSessionDisposed(EventArgs)

Olayı tetikler SessionDisposed .

ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

Ekinlikler

Name Description
SessionCreated

Oturum oluşturulduğunda gerçekleşir.

SessionDisposed

Bir oturum atıldığında gerçekleşir.

Belirtik Arabirim Kullanımları

Name Description
IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

Serileştirme yöneticisine özel bir serileştirme sağlayıcısı ekler.

IDesignerSerializationManager.Context

Bu serileştirme oturumu için bağlam yığınını alır.

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

yöntemini uygular CreateInstance(Type, ICollection, String, Boolean) .

IDesignerSerializationManager.GetInstance(String)

Belirtilen adda oluşturulan bir nesnenin örneğini alır.

IDesignerSerializationManager.GetName(Object)

Belirtilen nesne için bir ad alır.

IDesignerSerializationManager.GetSerializer(Type, Type)

Belirtilen nesne türü için istenen türde bir seri hale getirici alır.

IDesignerSerializationManager.GetType(String)

Belirtilen adın türünü alır.

IDesignerSerializationManager.Properties

özelliğini uygular Properties .

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

Daha önce eklenen bir serileştirme sağlayıcısını kaldırır.

IDesignerSerializationManager.ReportError(Object)

Serileştirmede kurtarılabilir bir hata bildirmek için kullanılır.

IDesignerSerializationManager.ResolveName

Serileştirme yöneticisinin ad tablosunda belirtilen adı bulamadığınızda IDesignerSerializationManager.GetName(Object) gerçekleşir.

IDesignerSerializationManager.SerializationComplete

Serileştirme tamamlandığında gerçekleşir.

IDesignerSerializationManager.SetName(Object, String)

Belirtilen nesnenin adını ayarlar.

IServiceProvider.GetService(Type)

Bu üyenin açıklaması için yöntemine GetService(Type) bakın.

Şunlara uygulanır

Ayrıca bkz.