SurrogateSelector クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
シリアル化処理または逆シリアル化処理にデリゲートするシリアル化サロゲートの選択のために、フォーマッタを支援します。
public ref class SurrogateSelector : System::Runtime::Serialization::ISurrogateSelector
public class SurrogateSelector : System.Runtime.Serialization.ISurrogateSelector
[System.Runtime.InteropServices.ComVisible(true)]
public class SurrogateSelector : System.Runtime.Serialization.ISurrogateSelector
type SurrogateSelector = class
interface ISurrogateSelector
[<System.Runtime.InteropServices.ComVisible(true)>]
type SurrogateSelector = class
interface ISurrogateSelector
Public Class SurrogateSelector
Implements ISurrogateSelector
- 継承
-
SurrogateSelector
- 派生
- 属性
- 実装
例
次のコード例は、シリアル化できないクラスを正しくシリアル化または逆シリアル化する方法を認識するシリアル化サロゲート クラスを作成する方法を示しています。 さらに、この例では SerializationException、.
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
// This class is not serializable.
class Employee
{
public String name, address;
public Employee(String name, String address)
{
this.name = name;
this.address = address;
}
}
// This class can manually serialize an Employee object.
sealed class EmployeeSerializationSurrogate : ISerializationSurrogate
{
// Serialize the Employee object to save the object's name and address fields.
public void GetObjectData(Object obj,
SerializationInfo info, StreamingContext context)
{
var emp = (Employee) obj;
info.AddValue("name", emp.name);
info.AddValue("address", emp.address);
}
// Deserialize the Employee object to set the object's name and address fields.
public Object SetObjectData(Object obj,
SerializationInfo info, StreamingContext context,
ISurrogateSelector selector)
{
var emp = (Employee) obj;
emp.name = info.GetString("name");
emp.address = info.GetString("address");
return emp;
}
}
public sealed class App
{
static void Main()
{
// This sample uses the BinaryFormatter.
IFormatter formatter = new BinaryFormatter();
// Create a MemoryStream that the object will be serialized into and deserialized from.
using (Stream stream = new MemoryStream())
{
// Create a SurrogateSelector.
var ss = new SurrogateSelector();
// Tell the SurrogateSelector that Employee objects are serialized and deserialized
// using the EmployeeSerializationSurrogate object.
ss.AddSurrogate(typeof(Employee),
new StreamingContext(StreamingContextStates.All),
new EmployeeSerializationSurrogate());
// Associate the SurrogateSelector with the BinaryFormatter.
formatter.SurrogateSelector = ss;
try
{
// Serialize an Employee object into the memory stream.
formatter.Serialize(stream, new Employee("Jeff", "1 Microsoft Way"));
}
catch (SerializationException e)
{
Console.WriteLine("Serialization failed: {0}", e.Message);
throw;
}
// Rewind the MemoryStream.
stream.Position = 0;
try
{
// Deserialize the Employee object from the memory stream.
var emp = (Employee) formatter.Deserialize(stream);
// Verify that it all worked.
Console.WriteLine("Name = {0}, Address = {1}", emp.name, emp.address);
}
catch (SerializationException e)
{
Console.WriteLine("Deserialization failed: {0}", e.Message);
throw;
}
}
}
}
// This code produces the following output.
//
// Name = Jeff, Address = 1 Microsoft Way
注釈
シリアル化サロゲートを使用すると、ユーザーは別のオブジェクトのシリアル化要件を処理でき、必要に応じてシリアル化されたデータを変換できるオブジェクトが提供されます。
コンストラクター
SurrogateSelector() |
SurrogateSelector クラスの新しいインスタンスを初期化します。 |
メソッド
AddSurrogate(Type, StreamingContext, ISerializationSurrogate) |
確認済みのサロゲートのリストにサロゲートを追加します。 |
ChainSelector(ISurrogateSelector) |
特定のオブジェクト型を処理できる、指定した ISurrogateSelector をサロゲートのリストに追加します。 |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetNextSelector() |
セレクターのチェインの、次のセレクターを返します。 |
GetSurrogate(Type, StreamingContext, ISurrogateSelector) |
特定の型のサロゲートを返します。 |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
RemoveSurrogate(Type, StreamingContext) |
指定した型に関連付けられているサロゲートを削除します。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |