SerializableAttribute-Klasse
Gibt an, dass eine Klasse serialisiert werden kann. Die Klasse kann nicht vererbt werden.
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Struct Or AttributeTargets.Enum Or AttributeTargets.Delegate, Inherited:=False)> _
Public NotInheritable Class SerializableAttribute
Inherits Attribute
'Usage
Dim instance As SerializableAttribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Delegate, Inherited=false)]
public sealed class SerializableAttribute : Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Struct|AttributeTargets::Enum|AttributeTargets::Delegate, Inherited=false)]
public ref class SerializableAttribute sealed : public Attribute
/** @attribute ComVisibleAttribute(true) */
/** @attribute AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Delegate, Inherited=false) */
public final class SerializableAttribute extends Attribute
ComVisibleAttribute(true)
AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Delegate, Inherited=false)
public final class SerializableAttribute extends Attribute
Hinweise
Wenden Sie das SerializableAttribute-Attribut auf einen Typ an, um anzugeben, dass Instanzen dieses Typs serialisiert werden können. Die Common Language Runtime löst eine SerializationException aus, wenn das SerializableAttribute-Attribut auf einen der Typen im zu serialisierenden Objektdiagramm nicht angewendet wurde.
Wenden Sie das SerializableAttribute-Attribut auch dann an, wenn die Klasse ebenfalls die ISerializable-Schnittstelle zur Steuerung des Serialisierungsvorgangs implementiert.
Alle öffentlichen und privaten Felder eines mit dem SerializableAttribute markierten Typs werden standardmäßig serialisiert, es sei denn, der Typ implementiert die ISerializable-Schnittstelle, um den Serialisierungsvorgang zu überschreiben. Der Standardserialisierungsvorgang schließt alle Felder aus, die mit dem NonSerializedAttribute-Attribut markiert sind. Wenn ein Feld eines serialisierbaren Typs einen Zeiger, ein Handle oder eine andere Datenstruktur enthält, die für eine bestimmte Umgebung spezifisch ist und in einer anderen Umgebung nicht sinnvoll ersetzt werden kann, ist es ratsam, das NonSerializedAttribute-Attribut auf das Feld anzuwenden.
Weitere Informationen über das Verwenden von Attributen finden Sie unter Erweitern von Metadaten mithilfe von Attributen. Weitere Informationen über die Serialisierung finden Sie unter System.Runtime.Serialization.
Beispiel
Im folgenden Beispiel wird die Serialisierung eines Objekts veranschaulicht, das mit dem SerializableAttribute-Attribut gekennzeichnet ist. Wenn BinaryFormatter anstelle von SoapFormatter verwendet werden soll, kommentieren Sie die entsprechenden Zeilen aus.
Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Public Class Test
Public Shared Sub Main()
' Creates a new TestSimpleObject object.
Dim obj As New TestSimpleObject()
Console.WriteLine("Before serialization the object contains: ")
obj.Print()
' Opens a file and serializes the object into it in binary format.
Dim stream As Stream = File.Open("data.xml", FileMode.Create)
Dim formatter As New SoapFormatter()
formatter.Serialize(stream, obj)
stream.Close()
' Empties obj.
obj = Nothing
' Opens file "data.xml" and deserializes the object from it.
stream = File.Open("data.xml", FileMode.Open)
formatter = New SoapFormatter()
obj = CType(formatter.Deserialize(stream), TestSimpleObject)
stream.Close()
Console.WriteLine("")
Console.WriteLine("After deserialization the object contains: ")
obj.Print()
End Sub 'Main
End Class 'Test
' A test object that needs to be serialized.
<Serializable()> Public Class TestSimpleObject
Public member1 As Integer
Public member2 As String
Public member3 As String
Public member4 As Double
' A member that is not serialized.
<NonSerialized()> Public member5 As String
Public Sub New()
member1 = 11
member2 = "hello"
member3 = "hello"
member4 = 3.14159265
member5 = "hello world!"
End Sub 'New
Public Sub Print()
Console.WriteLine("member1 = '{0}'", member1)
Console.WriteLine("member2 = '{0}'", member2)
Console.WriteLine("member3 = '{0}'", member3)
Console.WriteLine("member4 = '{0}'", member4)
Console.WriteLine("member5 = '{0}'", member5)
End Sub 'Print
End Class 'TestSimpleObject
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
//using System.Runtime.Serialization.Formatters.Binary;
public class Test {
public static void Main() {
//Creates a new TestSimpleObject object.
TestSimpleObject obj = new TestSimpleObject();
Console.WriteLine("Before serialization the object contains: ");
obj.Print();
//Opens a file and serializes the object into it in binary format.
Stream stream = File.Open("data.xml", FileMode.Create);
SoapFormatter formatter = new SoapFormatter();
//BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, obj);
stream.Close();
//Empties obj.
obj = null;
//Opens file "data.xml" and deserializes the object from it.
stream = File.Open("data.xml", FileMode.Open);
formatter = new SoapFormatter();
//formatter = new BinaryFormatter();
obj = (TestSimpleObject)formatter.Deserialize(stream);
stream.Close();
Console.WriteLine("");
Console.WriteLine("After deserialization the object contains: ");
obj.Print();
}
}
// A test object that needs to be serialized.
[Serializable()]
public class TestSimpleObject {
public int member1;
public string member2;
public string member3;
public double member4;
// A field that is not serialized.
[NonSerialized()] public string member5;
public TestSimpleObject() {
member1 = 11;
member2 = "hello";
member3 = "hello";
member4 = 3.14159265;
member5 = "hello world!";
}
public void Print() {
Console.WriteLine("member1 = '{0}'", member1);
Console.WriteLine("member2 = '{0}'", member2);
Console.WriteLine("member3 = '{0}'", member3);
Console.WriteLine("member4 = '{0}'", member4);
Console.WriteLine("member5 = '{0}'", member5);
}
}
#using <system.dll>
#using <system.messaging.dll>
#using <System.Runtime.Serialization.Formatters.Soap.dll>
using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization::Formatters::Soap;
// A test object that needs to be serialized.
[Serializable]
ref class TestSimpleObject
{
private:
int member1;
String^ member2;
String^ member3;
double member4;
public:
// A field that is not serialized.
[NonSerialized]
String^ member5;
TestSimpleObject()
{
member1 = 11;
member2 = "hello";
member3 = "hello";
member4 = 3.14159265;
member5 = "hello world!";
}
void Print()
{
Console::WriteLine( "member1 = ' {0}'", member1 );
Console::WriteLine( "member2 = ' {0}'", member2 );
Console::WriteLine( "member3 = ' {0}'", member3 );
Console::WriteLine( "member4 = ' {0}'", member4 );
Console::WriteLine( "member5 = ' {0}'", member5 );
}
};
int main()
{
//Creates a new TestSimpleObject object.
TestSimpleObject^ obj = gcnew TestSimpleObject;
Console::WriteLine( "Before serialization the Object* contains: " );
obj->Print();
//Opens a file and serializes the object into it in binary format.
Stream^ stream = File::Open( "data.xml", FileMode::Create );
SoapFormatter^ formatter = gcnew SoapFormatter;
//BinaryFormatter* formatter = new BinaryFormatter();
formatter->Serialize( stream, obj );
stream->Close();
//Empties obj.
obj = nullptr;
//Opens file S"data.xml" and deserializes the object from it.
stream = File::Open( "data.xml", FileMode::Open );
formatter = gcnew SoapFormatter;
//formatter = new BinaryFormatter();
obj = dynamic_cast<TestSimpleObject^>(formatter->Deserialize( stream ));
stream->Close();
Console::WriteLine( "" );
Console::WriteLine( "After deserialization the object contains: " );
obj->Print();
}
import System.*;
import System.IO.*;
import System.Runtime.Serialization.*;
import System.Runtime.Serialization.Formatters.Soap.*;
//import System.Runtime.Serialization.Formatters.Binary;
public class Test
{
public static void main(String[] args)
{
//Creates a new TestSimpleObject object.
TestSimpleObject obj = new TestSimpleObject();
Console.WriteLine("Before serialization the object contains: ");
obj.Print();
//Opens a file and serializes the object into it in binary format.
Stream stream = File.Open("data.xml", FileMode.Create);
SoapFormatter formatter = new SoapFormatter();
//BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, obj);
stream.Close();
//Empties obj.
obj = null;
//Opens file "data.xml" and deserializes the object from it.
stream = File.Open("data.xml", FileMode.Open);
formatter = new SoapFormatter();
//formatter = new BinaryFormatter();
obj = (TestSimpleObject)(formatter.Deserialize(stream));
stream.Close();
Console.WriteLine("");
Console.WriteLine("After deserialization the object contains: ");
obj.Print();
} //main
} //Test
// A test object that needs to be serialized.
/** @attribute Serializable()
*/
public class TestSimpleObject
{
public int member1;
public String member2;
public String member3;
public double member4;
// A field that is not serialized.
/** @attribute NonSerialized()
*/
public String member5;
public TestSimpleObject()
{
member1 = 11;
member2 = "hello";
member3 = "hello";
member4 = 3.14159265;
member5 = "hello world!";
} //TestSimpleObject
public void Print()
{
Console.WriteLine("member1 = '{0}'", (System.Int32)member1);
Console.WriteLine("member2 = '{0}'", member2);
Console.WriteLine("member3 = '{0}'", member3);
Console.WriteLine("member4 = '{0}'", (System.Double)member4);
Console.WriteLine("member5 = '{0}'", member5);
} //Print
} //TestSimpleObject
Vererbungshierarchie
System.Object
System.Attribute
System.SerializableAttribute
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
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
SerializableAttribute-Member
System-Namespace
Attribute-Klasse
ISerializable
NonSerializedAttribute-Klasse
Weitere Ressourcen
Erweitern von Metadaten mithilfe von Attributen
XML- und SOAP-Serialisierung