DesignerSerializationManager Kelas

Definisi

Menyediakan implementasi IDesignerSerializationManager antarmuka.

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
Warisan
DesignerSerializationManager
Penerapan

Keterangan

Antarmuka IDesignerSerializationManager dirancang untuk menjadi antarmuka format-independen ke objek yang mengontrol serialisasi. Ini pada dasarnya menyediakan konteks dan layanan untuk serializer, yang benar-benar melakukan deserialisasi. IDesignerSerializationManager membantu dalam proses deserialisasi dengan melacak objek. Ini mirip dalam teknik dengan IDesignerHost antarmuka: perancang benar-benar menyediakan antarmuka pengguna (UI), dan IDesignerHost menyediakan lem yang memungkinkan desainer yang berbeda untuk bekerja sama.

Kelas DesignerSerializationManager mengimplementasikan IDesignerSerializationManager. Ini dirancang untuk menyediakan bentuk deserialisasi generik yang mirip dengan serializer run-time seperti BinaryFormatter.

Kelas ini DesignerSerializationManager mencapai tiga tujuan:

  • Ini adalah objek turnkey sederhana yang dapat digunakan untuk mendeserialisasi berbagai format.

  • Ini umum dan tidak terikat dengan format tertentu. Ini dapat digunakan secara merata untuk deserialisasi CodeDOM serta deserialisasi markup.

  • Ini dapat diperluas dan mendukung metode serialisasi yang berbeda yang digunakan dalam skenario salin/tempel dan batalkan/ulangi.

Serialisasi waktu desain memiliki perbedaan berikut dari serialisasi objek run-time:

  • Objek yang melakukan serialisasi umumnya terpisah dari objek run-time, sehingga logika waktu desain dapat dihapus dari komponen.

  • Skema serialisasi mengasumsikan objek akan dibuat sepenuhnya diinisialisasi, dan kemudian dimodifikasi melalui pemanggilan properti dan metode selama deserialisasi.

  • Properti objek yang memiliki nilai yang tidak pernah diatur pada objek (properti berisi nilai default) tidak diserialisasikan. Sebaliknya, aliran deserialisasi mungkin memiliki lubang.

  • Penekanan ditempatkan pada kualitas konten dalam aliran serialisasi, bukan serialisasi penuh objek. Ini berarti bahwa jika tidak ada cara yang ditentukan untuk menserialisasikan objek, objek tersebut dapat dilewati daripada melemparkan pengecualian. Mesin serialisasi dapat memberikan heuristik di sini untuk memutuskan kegagalan mana yang dapat diabaikan dan mana yang tidak dapat dipulihkan.

  • Aliran serialisasi mungkin memiliki lebih banyak data daripada yang diperlukan untuk deserialisasi. Serialisasi kode sumber, misalnya, memiliki kode pengguna yang dicampur dengan kode yang diperlukan untuk mendeserialisasi grafik objek. Kode pengguna ini harus diabaikan pada deserialisasi dan dipertahankan pada serialisasi.

Karena perbedaan ini, model serialisasi yang berbeda berlaku untuk serialisasi waktu desain. Model ini menggunakan objek serializer terpisah untuk setiap jenis data yang diserialisasikan. Setiap serializer memberikan kontribusi kecilnya terhadap masalah secara keseluruhan. Serializer ini semuanya dikoordinasikan melalui manajer serialisasi umum. Manajer serialisasi bertanggung jawab untuk mempertahankan status antara serializer yang berbeda ini. Sebagai contoh, pertimbangkan kelas berikut:

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

Instans kelas ini akan menggunakan tiga serializer yang berbeda: satu untuk SampleObject, satu untuk string, dan satu lagi untuk bilangan bulat. Serializer untuk SampleObject disebut serializer akar karena SampleObject merupakan akar grafik serialisasi. Grafik objek yang lebih kompleks juga dapat dibuat. Misalnya, pertimbangkan apa yang akan terjadi jika SampleObject diubah sebagai berikut:

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

Ini memungkinkan SampleObject untuk memiliki anak yang merupakan contoh lain dari dirinya sendiri. Kode berikut mengisi grafik objek:

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

Ketika root diserialisasikan, akan ada empat serializer yang digunakan: satu serializer akar, satu serializer untuk anak SampleObject, satu serializer untuk int, dan satu serializer untuk string. Serializer di-cache berdasarkan jenis, sehingga tidak perlu membuat serializer untuk setiap instans SampleObject.

Kelas DesignerSerializationManager ini didasarkan pada gagasan sesi serialisasi. Sesi mempertahankan status yang dapat diakses oleh berbagai serializer. Ketika sesi dibuang, status ini dihancurkan. Ini membantu memastikan bahwa serializer sebagian besar tetap stateless, dan membantu membersihkan serializer yang telah rusak. Tabel berikut ini menjelaskan bagaimana status dikelola di dalam dan di antara sesi.

Status Global

Status ini dimiliki oleh objek manajer serialisasi, tetapi independen dari sesi serialisasi saat ini.

Object Penggunaan
Penyedia serialisasi Objek dapat menambahkan diri mereka sebagai penyedia serialisasi kustom. Karena penyedia ini digunakan untuk menemukan serializer, mereka lebih lama dari sesi serialisasi.

Status Session-Owned

Status ini dimiliki oleh sesi dan dihancurkan ketika sesi dihancurkan. Akibatnya, mengakses properti atau metode apa pun yang akan memanipulasi status ini akan memberikan pengecualian jika manajer serialisasi tidak berada dalam sesi aktif.

Object Penggunaan
Peristiwa ResolveName Peristiwa ResolveName ini dilampirkan oleh serializer untuk memberikan resolusi nama tambahan. Semua handler dilepas dari kejadian ini ketika sesi berakhir.
Peristiwa SerializationComplete Acara SerializationComplete dinaikkan tepat sebelum sesi dibuang. Kemudian, semua handler dilepas dari kejadian ini.
Tabel nama Manajer serialisasi mempertahankan tabel yang memetakan antara objek dan namanya. Serializer dapat memberikan nama objek untuk identifikasi yang mudah. Tabel nama ini dibersihkan ketika sesi berakhir.
Cache serializer Manajer serialisasi mempertahankan cache serializer yang telah diminta untuk memasok. Cache ini dibersihkan ketika sesi berakhir. Metode publik GetSerializer dapat dipanggil dengan aman kapan saja, tetapi nilainya di-cache hanya jika dipanggil dari dalam sesi.
Tumpukan konteks Manajer serialisasi mempertahankan objek yang disebut tumpukan konteks, yang dapat Anda akses dengan Context properti . Serializer dapat menggunakan tumpukan ini untuk menyimpan informasi tambahan yang tersedia untuk serializer lain. Misalnya, serializer yang menserialisasikan nilai properti dapat mendorong nama properti pada tumpukan serialisasi sebelum meminta nilai untuk diserialisasikan. Tumpukan ini dibersihkan ketika sesi dihentikan.
Daftar kesalahan Manajer serialisasi mempertahankan daftar kesalahan yang terjadi selama serialisasi. Daftar ini, yang diakses melalui Errors properti , dibersihkan ketika sesi dihentikan. Errors Mengakses properti antar sesi akan menghasilkan pengecualian.

Konstruktor

DesignerSerializationManager()

Menginisialisasi instans baru kelas DesignerSerializationManager.

DesignerSerializationManager(IServiceProvider)

Menginisialisasi instans DesignerSerializationManager baru kelas dengan penyedia layanan yang diberikan.

Properti

Container

Mendapatkan atau mengatur ke kontainer untuk manajer serialisasi ini.

Errors

Mendapatkan daftar kesalahan yang terjadi selama serialisasi atau deserialisasi.

PreserveNames

Mendapatkan atau menetapkan nilai yang menunjukkan apakah CreateInstance(Type, ICollection, String, Boolean) metode harus memeriksa keberadaan nama yang diberikan dalam kontainer.

PropertyProvider

Mendapatkan objek yang harus digunakan untuk menyediakan properti ke properti manajer Properties serialisasi.

RecycleInstances

Mendapatkan atau menetapkan nilai yang menunjukkan apakah CreateInstance(Type, ICollection, String, Boolean) akan selalu membuat instans baru dari jenis.

ValidateRecycledTypes

Mendapatkan atau menetapkan nilai yang menunjukkan apakah CreateInstance(Type, ICollection, String, Boolean) metode akan memverifikasi bahwa nama yang cocok merujuk ke jenis yang sama.

Metode

CreateInstance(Type, ICollection, String, Boolean)

Membuat instans jenis.

CreateSession()

Membuat sesi serialisasi baru.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetRuntimeType(String)

Mendapatkan jenis yang sesuai dengan nama jenis yang ditentukan.

GetSerializer(Type, Type)

Mendapatkan serializer untuk jenis objek yang diberikan.

GetService(Type)

Mendapatkan layanan yang diminta.

GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
GetType(String)

Mendapatkan jenis yang diminta.

MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
OnResolveName(ResolveNameEventArgs)

Memunculkan kejadian ResolveName.

OnSessionCreated(EventArgs)

Memunculkan kejadian SessionCreated.

OnSessionDisposed(EventArgs)

Memunculkan kejadian SessionDisposed.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Acara

SessionCreated

Terjadi saat sesi dibuat.

SessionDisposed

Terjadi ketika sesi dibuang.

Implementasi Antarmuka Eksplisit

IDesignerSerializationManager.AddSerializationProvider(IDesignerSerializationProvider)

Menambahkan penyedia serialisasi kustom ke manajer serialisasi.

IDesignerSerializationManager.Context

Mendapatkan tumpukan konteks untuk sesi serialisasi ini.

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

CreateInstance(Type, ICollection, String, Boolean) Menerapkan metode .

IDesignerSerializationManager.GetInstance(String)

Mengambil instans objek yang dibuat dari nama yang ditentukan.

IDesignerSerializationManager.GetName(Object)

Mengambil nama untuk objek yang ditentukan.

IDesignerSerializationManager.GetSerializer(Type, Type)

Mendapatkan serializer dari jenis yang diminta untuk jenis objek yang ditentukan.

IDesignerSerializationManager.GetType(String)

Mendapatkan jenis nama yang ditentukan.

IDesignerSerializationManager.Properties

Properties Mengimplementasikan properti .

IDesignerSerializationManager.RemoveSerializationProvider(IDesignerSerializationProvider)

Menghapus penyedia serialisasi yang ditambahkan sebelumnya.

IDesignerSerializationManager.ReportError(Object)

Digunakan untuk melaporkan kesalahan yang dapat dipulihkan dalam serialisasi.

IDesignerSerializationManager.ResolveName

Terjadi ketika IDesignerSerializationManager.GetName(Object) tidak dapat menemukan nama yang ditentukan dalam tabel nama manajer serialisasi.

IDesignerSerializationManager.SerializationComplete

Terjadi ketika serialisasi selesai.

IDesignerSerializationManager.SetName(Object, String)

Mengatur nama untuk objek yang ditentukan.

IServiceProvider.GetService(Type)

Untuk deskripsi anggota ini, lihat GetService(Type) metode .

Berlaku untuk

Lihat juga