ISerializable.GetObjectData-Methode
Füllt eine SerializationInfo mit den Daten, die zum Serialisieren des Zielobjekts erforderlich sind.
Namespace: System.Runtime.Serialization
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Sub GetObjectData ( _
info As SerializationInfo, _
context As StreamingContext _
)
'Usage
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
)
Parameter
- info
Die mit Daten zu füllende SerializationInfo.
- context
Das Ziel (siehe StreamingContext) dieser Serialisierung.
Ausnahmen
Ausnahmetyp | Bedingung |
---|---|
Der Aufrufer verfügt nicht über die erforderliche Berechtigung. |
Hinweise
Alle in der SerializationInfo enthaltenen Objekte werden automatisch vom Formatierungsprogramm nachverfolgt und serialisiert.
Für Code, der GetObjectData aufruft, ist zum Bereitstellen von Serialisierungsdiensten die SecurityPermission erforderlich. Zugeordnete Enumeration: SecurityPermissionFlag.SerializationFormatter.
Hinweis
Es ist nicht sichergestellt, dass diese Methode während der Serialisierung für jede Objektinstanz nur einmal aufgerufen wird. Daher sollte die Methode so implementiert werden, dass ihr Verhalten unabhängig davon ist, wie oft sie aufgerufen wird.
Beispiel
Im folgenden Beispiel werden mithilfe der GetObjectData-Methode alternative Werte für ein serialisiertes Objekt festgelegt. Im Code wird die AddValue-Methode der SerializationInfo-Klasse verwendet, damit bei Serialisierung des Objekts alternative Werte gespeichert werden können. Wenn der Konstruktur der Person
-Klasse hingegen bei der Deserialisierung aufgerufen wird, werden die alternativen Werte mithilfe der GetValue-Methode abgerufen und den Feldern des Objekts neu zugewiesen.
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; }
}
}
}
Plattformen
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 unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
ISerializable-Schnittstelle
ISerializable-Member
System.Runtime.Serialization-Namespace
StreamingContext
SerializationInfo