DesignerSerializationManager Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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. |