SerializationBinder クラス
アセンブリ: mscorlib (mscorlib.dll 内)

<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public MustInherit Class SerializationBinder

シリアル化中に、フォーマッタは、正しい型およびバージョンのオブジェクトのインスタンスを作成するために必要な情報を送信します。通常、この情報には、オブジェクトの完全な型名および完全なアセンブリ名が含まれます。アセンブリ名には、アセンブリの名前、バージョン、および厳密な名前 (厳密な名前付きアセンブリ を参照) ハッシュが含まれます。既定では、逆シリアル化でこの情報を使用して、同一のオブジェクトのインスタンスを作成します。セキュリティ ポリシーで制限されるアセンブリの読み込みの場合は例外です。クラスがアセンブリ間を移動したためか、異なるバージョンのクラスがサーバー上およびクライアント上で必要であるためのいずれかの理由で、一部のユーザーはどのクラスを読み込むかを制御する必要があります。
これは抽象基本クラスです。すべてのバインダはこのクラスを拡張します。
継承時の注意 SerializationBinder から継承する場合は、BindToType のメンバをオーバーライドする必要があります。
Imports System Imports System.IO Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters.Binary Imports System.Reflection Imports System.Security.Permissions Class App <STAThread()> Shared Sub Main() Serialize() Deserialize() End Sub Shared Sub Serialize() ' To serialize the objects, you must first open a stream for writing. ' Use a file stream here. Dim fs As New FileStream("DataFile.dat", FileMode.Create) Try ' Construct a BinaryFormatter and use it ' to serialize the data to the stream. Dim formatter As New BinaryFormatter ' Construct a Version1Type object and serialize it. Dim obj As New Version1Type obj.x = 123 formatter.Serialize(fs, obj) Catch e As SerializationException Console.WriteLine("Failed to serialize. Reason: " & e.Message) Throw Finally fs.Close() End Try End Sub Shared Sub Deserialize() ' Declare the Version2Type reference. Dim obj As Version2Type = Nothing ' Open the file containing the data that you want to deserialize. Dim fs As New FileStream("DataFile.dat", FileMode.Open) Try ' Construct a BinaryFormatter and use it ' to deserialize the data from the stream. Dim formatter As New BinaryFormatter ' Construct an instance of the ' Version1ToVersion2TypeSerialiationBinder type. ' This Binder type can deserialize a Version1Type ' object to a Version2Type object. formatter.Binder = New Version1ToVersion2DeserializationBinder obj = DirectCast(formatter.Deserialize(fs), Version2Type) Catch e As SerializationException Console.WriteLine("Failed to deserialize. Reason: " & e.Message) Throw Finally fs.Close() End Try ' To prove that a Version2Type object was deserialized, ' display the object's type and fields to the console. Console.WriteLine("Type of object deserialized: {0}", obj.GetType()) Console.WriteLine("x = {0}, name = {1}", obj.x, obj.name) End Sub End Class <Serializable()> Class Version1Type Public x As Int32 End Class <Serializable()> Class Version2Type Implements ISerializable Public x As Int32 Public name As String ' The security attribute demands that code that calls ' this method have permission to perform serialization. <SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter:=True)> _ Private Sub GetObjectData(ByVal info As SerializationInfo, _ ByVal context As StreamingContext) Implements ISerializable.GetObjectData info.AddValue("x", x) info.AddValue("name", name) End Sub ' The security attribute demands that code that calls ' this method have permission to perform serialization. <SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter:=True)> _ Private Sub New(ByVal info As SerializationInfo, _ ByVal context As StreamingContext) x = info.GetInt32("x") Try name = info.GetString("name") Catch e As SerializationException ' The "name" field was not serialized because ' Version1Type did not contain this field. ' Set this field to a reasonable default value. name = "Reasonable default value" End Try End Sub End Class NotInheritable Class Version1ToVersion2DeserializationBinder Inherits SerializationBinder Public Overrides Function BindToType(ByVal assemblyName As String, _ ByVal typeName As String) As Type Dim typeToDeserialize As Type = Nothing ' For each assemblyName/typeName that you want to deserialize ' to a different type, set typeToDeserialize to the desired type. Dim assemVer1 As String = [Assembly].GetExecutingAssembly().FullName Dim typeVer1 As String = GetType(Version1Type).FullName If assemblyName = assemVer1 And typeName = typeVer1 Then ' To use a type from a different assembly version, ' change the version number. ' To do this, uncomment the following code. ' assemblyName = assemblyName.Replace("1.0.0.0", "2.0.0.0") ' To use a different type from the same assembly, ' change the type name. typeName = typeName.Replace("Version1Type", "Version2Type") End If ' The following code returns the type. typeToDeserialize = Type.GetType(String.Format("{0}, {1}", typeName, _ assemblyName)) Return typeToDeserialize End Function End Class
using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Reflection; using System.Security.Permissions; class App { [STAThread] static void Main() { Serialize(); Deserialize(); } static void Serialize() { // To serialize the objects, you must first open a stream for writing. // Use a file stream here. FileStream fs = new FileStream("DataFile.dat", FileMode.Create); try { // Construct a BinaryFormatter and use it // to serialize the data to the stream. BinaryFormatter formatter = new BinaryFormatter(); // Construct a Version1Type object and serialize it. Version1Type obj = new Version1Type(); obj.x = 123; formatter.Serialize(fs, obj); } catch (SerializationException e) { Console.WriteLine("Failed to serialize. Reason: " + e.Message); throw; } finally { fs.Close(); } } static void Deserialize() { // Declare the Version2Type reference. Version2Type obj = null; // Open the file containing the data that you want to deserialize. FileStream fs = new FileStream("DataFile.dat", FileMode.Open); try { // Construct a BinaryFormatter and use it // to deserialize the data from the stream. BinaryFormatter formatter = new BinaryFormatter(); // Construct an instance of our the // Version1ToVersion2TypeSerialiationBinder type. // This Binder type can deserialize a Version1Type // object to a Version2Type object. formatter.Binder = new Version1ToVersion2DeserializationBinder(); obj = (Version2Type) formatter.Deserialize(fs); } catch (SerializationException e) { Console.WriteLine("Failed to deserialize. Reason: " + e.Message); throw; } finally { fs.Close(); } // To prove that a Version2Type object was deserialized, // display the object's type and fields to the console. Console.WriteLine("Type of object deserialized: " + obj.GetType()); Console.WriteLine("x = {0}, name = {1}", obj.x, obj.name); } } [Serializable] class Version1Type { public Int32 x; } [Serializable] class Version2Type : ISerializable { public Int32 x; public String name; // The security attribute demands that code that calls // this method have permission to perform serialization. [SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)] void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("x", x); info.AddValue("name", name); } // The security attribute demands that code that calls // this method have permission to perform serialization. [SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)] private Version2Type(SerializationInfo info, StreamingContext context) { x = info.GetInt32("x"); try { name = info.GetString("name"); } catch (SerializationException) { // The "name" field was not serialized because Version1Type // did not contain this field. // Set this field to a reasonable default value. name = "Reasonable default value"; } } } sealed class Version1ToVersion2DeserializationBinder : SerializationBinder { public override Type BindToType(string assemblyName, string typeName) { Type typeToDeserialize = null; // For each assemblyName/typeName that you want to deserialize to // a different type, set typeToDeserialize to the desired type. String assemVer1 = Assembly.GetExecutingAssembly().FullName; String typeVer1 = "Version1Type"; if (assemblyName == assemVer1 && typeName == typeVer1) { // To use a type from a different assembly version, // change the version number. // To do this, uncomment the following line of code. // assemblyName = assemblyName.Replace("1.0.0.0", "2.0.0.0"); // To use a different type from the same assembly, // change the type name. typeName = "Version2Type"; } // The following line of code returns the type. typeToDeserialize = Type.GetType(String.Format("{0}, {1}", typeName, assemblyName)); return typeToDeserialize; } }
using namespace System; using namespace System::IO; using namespace System::Runtime::Serialization; using namespace System::Runtime::Serialization::Formatters::Binary; using namespace System::Reflection; using namespace System::Security::Permissions; ref class Version1ToVersion2DeserializationBinder; [Serializable] ref class Version1Type { public: Int32 x; }; [Serializable] ref class Version2Type: public ISerializable { public: Int32 x; String^ name; // The security attribute demands that code that calls // this method have permission to perform serialization. [SecurityPermissionAttribute(SecurityAction::Demand,SerializationFormatter=true)] virtual void GetObjectData( SerializationInfo^ info, StreamingContext context ) { info->AddValue( "x", x ); info->AddValue( "name", name ); } private: // The security attribute demands that code that calls // this method have permission to perform serialization. [SecurityPermissionAttribute(SecurityAction::Demand,SerializationFormatter=true)] Version2Type( SerializationInfo^ info, StreamingContext context ) { x = info->GetInt32( "x" ); try { name = info->GetString( "name" ); } catch ( SerializationException^ ) { // The 'name' field was not serialized because Version1Type // did not contain this field. // We will set this field to a reasonable default value. name = "Reasonable default value"; } } }; ref class Version1ToVersion2DeserializationBinder sealed: public SerializationBinder { public: virtual Type^ BindToType( String^ assemblyName, String^ typeName ) override { Type^ typeToDeserialize = nullptr; // For each assemblyName/typeName that you want to deserialize to // a different type, set typeToDeserialize to the desired type. String^ assemVer1 = Assembly::GetExecutingAssembly()->FullName; String^ typeVer1 = "Version1Type"; if ( assemblyName->Equals( assemVer1 ) && typeName->Equals( typeVer1 ) ) { // To use a type from a different assembly version, // change the version number using the following line of code. // assemblyName = assemblyName.Replace("1.0.0.0", "2.0.0.0"); // To use a different type from the same assembly, // change the type name. typeName = "Version2Type"; } // The following line of code returns the type. typeToDeserialize = Type::GetType( String::Format( "{0}, {1}", typeName, assemblyName ) ); return typeToDeserialize; } }; ref class App { public: static void Serialize() { // To serialize the objects, you must first open a stream for writing. // We will use a file stream here. FileStream^ fs = gcnew FileStream( "DataFile.dat",FileMode::Create ); try { // Construct a BinaryFormatter and use it // to serialize the data to the stream. BinaryFormatter^ formatter = gcnew BinaryFormatter; // Construct a Version1Type Object and serialize it. Version1Type^ obj = gcnew Version1Type; obj->x = 123; formatter->Serialize( fs, obj ); } catch ( SerializationException^ e ) { Console::WriteLine( "Failed to serialize. Reason: {0}", e->Message ); throw; } finally { fs->Close(); } } static void Deserialize() { // Declare the Version2Type reference. Version2Type^ obj = nullptr; // Open the file containing the data that we want to deserialize. FileStream^ fs = gcnew FileStream( "DataFile.dat",FileMode::Open ); try { // Construct a BinaryFormatter and use it // to deserialize the data from the stream. BinaryFormatter^ formatter = gcnew BinaryFormatter; // Construct an instance of our // Version1ToVersion2TypeSerialiationBinder type. // This Binder type knows how to deserialize a Version1Type // Object* to a Version2Type Object. formatter->Binder = gcnew Version1ToVersion2DeserializationBinder; obj = dynamic_cast<Version2Type^>(formatter->Deserialize( fs )); } catch ( SerializationException^ e ) { Console::WriteLine( "Failed to deserialize. Reason: {0}", e->Message ); throw; } finally { fs->Close(); } // To prove that a Version2Type Object* was deserialized, // display the Object's type and fields to the console. Console::WriteLine( "Type of Object deserialized: {0}", obj->GetType() ); Console::WriteLine( "x = {0}, name = {1}", obj->x, obj->name ); } }; [STAThread] int main() { App::Serialize(); App::Deserialize(); return 0; }
import System.*; import System.IO.*; import System.Runtime.Serialization.*; import System.Runtime.Serialization.Formatters.Binary.*; import System.Reflection.*; import System.Security.Permissions.*; class App { /** @attribute STAThread() */ public static void main(String[] args) { Serialize(); Deserialize(); } //main static void Serialize() { // To serialize the objects, you must first open a stream for writing. // Use a file stream here. FileStream fs = new FileStream("DataFile.dat", FileMode.Create); try { // Construct a BinaryFormatter and use it // to serialize the data to the stream. BinaryFormatter formatter = new BinaryFormatter(); // Construct a Version1Type object and serialize it. Version1Type obj = new Version1Type(); obj.x = 123; formatter.Serialize(fs, obj); } catch (SerializationException e) { Console.WriteLine("Failed to serialize. Reason: " + e.get_Message()); } finally { fs.Close(); } } //Serialize static void Deserialize() { // Declare the Version2Type reference. Version2Type obj = null; // Open the file containing the data that you want to deserialize. FileStream fs = new FileStream("DataFile.dat", FileMode.Open); try { // Construct a BinaryFormatter and use it // to deserialize the data from the stream. BinaryFormatter formatter = new BinaryFormatter(); // Construct an instance of our the // Version1ToVersion2TypeSerialiationBinder type. // This Binder type can deserialize a Version1Type // object to a Version2Type object. formatter.set_Binder(new Version1ToVersion2DeserializationBinder()); obj = (Version2Type)(formatter.Deserialize(fs)); } catch (SerializationException e) { Console.WriteLine("Failed to deserialize. Reason: " + e.get_Message()); } finally { fs.Close(); } // To prove that a Version2Type object was deserialized, // display the object's type and fields to the console. Console.WriteLine("Type of object deserialized: " + obj.GetType()); System.Console.WriteLine("x = {0}, name = {1}", (System.Int32)obj.x , obj.name); } //Deserialize } //App /** @attribute Serializable() */ class Version1Type { public int x; } //Version1Type /** @attribute Serializable() */ class Version2Type implements ISerializable { public int x; public String name; // The security attribute demands that code that calls // this method have permission to perform serialization. /** @attribute SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true) */ public void GetObjectData(SerializationInfo info,StreamingContext context) { info.AddValue("x", x); info.AddValue("name", name); } //ISerializable.GetObjectData // The security attribute demands that code that calls // this method have permission to perform serialization. /** @attribute SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true) */ private Version2Type(SerializationInfo info, StreamingContext context) { x = info.GetInt32("x"); try { name = info.GetString("name"); } catch (SerializationException exp) { // The "name" field was not serialized because Version1Type // did not contain this field. // Set this field to a reasonable default value. name = "Reasonable default value"; } } //Version2Type } //Version2Type final class Version1ToVersion2DeserializationBinder extends SerializationBinder { public Type BindToType(String assemblyName, String typeName) { Type typeToDeserialize = null; // For each assemblyName/typeName that you want to deserialize to // a different type, set typeToDeserialize to the desired type. String assemVer1 = Assembly.GetExecutingAssembly().get_FullName(); String typeVer1 = "Version1Type"; if (assemblyName.Equals(assemVer1) && typeName.Equals(typeVer1)) { // To use a type from a different assembly version, // change the version number. // To do this, uncomment the following line of code. // assemblyName = assemblyName.Replace("1.0.0.0", "2.0.0.0"); // To use a different type from the same assembly, // change the type name. typeName = "Version2Type"; } // The following line of code returns the type. typeToDeserialize = Type.GetType(String.Format("{0}, {1}", typeName , assemblyName)); return typeToDeserialize; } //BindToType } //Version1ToVersion2DeserializationBinder

System.Runtime.Serialization.SerializationBinder


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


SerializationBinder コンストラクタ
アセンブリ: mscorlib (mscorlib.dll 内)


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


SerializationBinder メソッド

名前 | 説明 | |
---|---|---|
![]() | BindToType | 派生クラスでオーバーライドされると、シリアル化されたオブジェクトの型への連結を制御します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

SerializationBinder メンバ
ユーザーがクラスの読み込みを制御したり、読み込むクラスを指定したりできるようにします。
SerializationBinder データ型で公開されるメンバを以下の表に示します。

名前 | 説明 | |
---|---|---|
![]() | SerializationBinder |

名前 | 説明 | |
---|---|---|
![]() | BindToType | 派生クラスでオーバーライドされると、シリアル化されたオブジェクトの型への連結を制御します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

- SerializationBinderのページへのリンク