ISerializable.GetObjectData 메서드
대상 개체를 serialize하는 데 필요한 데이터로 SerializationInfo를 채웁니다.
네임스페이스: System.Runtime.Serialization
어셈블리: mscorlib(mscorlib.dll)
구문
‘선언
Sub GetObjectData ( _
info As SerializationInfo, _
context As StreamingContext _
)
‘사용 방법
Dim instance As ISerializable
Dim info As SerializationInfo
Dim context As StreamingContext
instance.GetObjectData(info, context)
void GetObjectData (
SerializationInfo info,
StreamingContext context
)
void GetObjectData (
SerializationInfo^ info,
StreamingContext context
)
void GetObjectData (
SerializationInfo info,
StreamingContext context
)
function GetObjectData (
info : SerializationInfo,
context : StreamingContext
)
매개 변수
- info
데이터로 채울 SerializationInfo입니다.
- context
이 serialization에 대한 대상입니다(StreamingContext 참조).
예외
예외 형식 | 조건 |
---|---|
호출자에게 필요한 권한이 없는 경우 |
설명
SerializationInfo에 포함된 모든 개체는 포맷터에 의해 자동으로 추적되고 serialize됩니다.
GetObjectData를 호출하는 코드는 serialization 서비스를 제공하는 데 SecurityPermission이 필요합니다. 연관된 열거형: SecurityPermissionFlag.SerializationFormatter
참고
serialize하는 동안 이 메서드가 개체 인스턴스마다 항상 한 번씩만 호출되는 것은 아닙니다. 따라서 이 메서드는 호출 횟수에 관계없이 동일하게 동작하도록 구현해야 합니다.
예제
다음 예제에서는 GetObjectData 메서드를 사용하여 serialize된 개체의 대체 값을 설정합니다. 이 코드에서는 SerializationInfo 클래스의 AddValue 메서드를 사용하여 개체가 serialize될 때 대체 값을 저장합니다. 반대로 deserialize하는 동안 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에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.
버전 정보
.NET Framework
2.0, 1.1, 1.0에서 지원
참고 항목
참조
ISerializable 인터페이스
ISerializable 멤버
System.Runtime.Serialization 네임스페이스
StreamingContext
SerializationInfo