ISerializable.GetObjectData メソッド
アセンブリ: mscorlib (mscorlib.dll 内)

Dim instance As ISerializable Dim info As SerializationInfo Dim context As StreamingContext instance.GetObjectData(info, context)


SerializationInfo に含まれるオブジェクトは、フォーマッタによって自動的に追跡およびシリアル化されます。
GetObjectData を呼び出すコードでは、シリアル化サービスを提供するために SecurityPermission が必要です。SecurityPermissionFlag.SerializationFormatter (関連する列挙体)
![]() |
---|
シリアル化時、このメソッドが呼び出される回数は、各オブジェクト インスタンスにつき 1 回だけであるとは限りません。したがって、呼び出しの回数に関係なく同じ動作が保たれるようにメソッドを実装する必要があります。 |

GetObjectData メソッドを使用して、シリアル化されたオブジェクトの代替値を設定する例を次に示します。このコードでは、オブジェクトのシリアル化時に、SerializationInfo クラスの AddValue メソッドを使用して代替値を格納します。逆に、逆シリアル化の実行時に Person クラスのコンストラクタが呼び出されたときには、代替値は GetValue メソッドを使用して取得され、オブジェクトのフィールドに再割り当てされます。
Imports System Imports System.Runtime.Serialization.Formatters.Binary Imports System.Runtime.Serialization Imports System.Security.Permissions Imports System.IO <Assembly: SecurityPermission _ (SecurityAction.RequestMinimum, Execution:=True)> Class Program Public Shared Sub Main() Try Run() Catch exc As Exception Console.WriteLine("{0}: {1}", exc.Message, exc.StackTrace) Finally Console.WriteLine("Press Enter to exit....") Console.ReadLine() End Try End Sub Shared Sub Run() Dim binaryFmt As New BinaryFormatter() Dim p As New Person() p.IdNumber = 1010 p.Name = "AAAAA" Dim fs As New FileStream("Person.xml", FileMode.OpenOrCreate) binaryFmt.Serialize(fs, p) fs.Close() Console.WriteLine _ ("Original Name: {0}, Original ID: {1}", p.Name, p.IdNumber) ' Deserialize. fs = New FileStream("Person.xml", FileMode.OpenOrCreate) Dim p2 As Person = CType(binaryFmt.Deserialize(fs), Person) Console.WriteLine("New Name: {0}, New ID: {1}", _ p2.Name, p2.IdNumber) fs.Close() End Sub End Class <Serializable()> _ Public Class Person Implements ISerializable Private name_value As String Private ID_value As Integer Public Sub New() End Sub Protected Sub New(ByVal info As SerializationInfo, _ ByVal context As StreamingContext) If info Is Nothing Then Throw New System.ArgumentNullException("info") End If name_value = CStr(info.GetValue("AltName", GetType(String))) ID_value = Fix(info.GetValue("AltID", GetType(Integer))) End Sub <SecurityPermission(SecurityAction.LinkDemand, _ Flags:=SecurityPermissionFlag.SerializationFormatter)> _ Public Overridable Sub GetObjectData _ (ByVal info As SerializationInfo, _ ByVal context As StreamingContext) _ Implements ISerializable.GetObjectData If info Is Nothing Then Throw New System.ArgumentNullException("info") End If info.AddValue("AltName", "XXX") info.AddValue("AltID", 9999) End Sub Public Property Name() As String Get Return name_value End Get Set(ByVal value As String) name_value = value End Set End Property Public Property IdNumber() As Integer Get Return ID_value End Get Set(ByVal value As Integer) ID_value = value End Set End Property End Class
using System; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization; using System.Security.Permissions; using System.IO; [assembly: SecurityPermission( SecurityAction.RequestMinimum, Execution = true)] namespace ISerializableExample { class Program { public static void Main() { try { Run(); } catch (Exception exc) { Console.WriteLine("{0}: {1}", exc.Message, exc.StackTrace); } finally { Console.WriteLine("Press Enter to exit...."); Console.ReadLine(); } } static void Run() { BinaryFormatter binaryFmt = new BinaryFormatter(); Person p = new Person(); p.IdNumber = 1010; p.Name = "AAAAA"; FileStream fs = new FileStream ("Person.xml", FileMode.OpenOrCreate); binaryFmt.Serialize(fs, p); fs.Close(); Console.WriteLine ("Original Name: {0}, Original ID: {1}", p.Name, p.IdNumber); // Deserialize. fs = new FileStream ("Person.xml", FileMode.OpenOrCreate); Person p2 = (Person)binaryFmt.Deserialize(fs); Console.WriteLine("New Name: {0}, New ID: {1}", p2.Name, p2.IdNumber); fs.Close(); } } [Serializable] public class Person : ISerializable { private string name_value; private int ID_value; public Person() { } protected Person(SerializationInfo info, StreamingContext context) { if (info == null) throw new System.ArgumentNullException("info"); name_value = (string)info.GetValue("AltName", typeof(string)); ID_value = (int)info.GetValue("AltID", typeof(int)); } [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] public virtual void GetObjectData( SerializationInfo info, StreamingContext context) { if (info == null) throw new System.ArgumentNullException("info"); info.AddValue("AltName", "XXX"); info.AddValue("AltID", 9999); } public string Name { get { return name_value; } set { name_value = value; } } public int IdNumber { get { return ID_value; } set { ID_value = value; } } } }

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からISerializable.GetObjectData メソッドを検索する場合は、下記のリンクをクリックしてください。

- ISerializable.GetObjectData メソッドのページへのリンク