Mise à jour : novembre 2007
Indique qu'une classe peut être sérialisée. Cette classe ne peut pas être héritée.
Espace de noms :
System
Assembly :
mscorlib (dans mscorlib.dll)
Visual Basic (Déclaration)
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Struct Or AttributeTargets.Enum Or AttributeTargets.Delegate, Inherited := False)> _
Public NotInheritable Class SerializableAttribute _
Inherits Attribute
Visual Basic (Utilisation)
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
public final class SerializableAttribute extends Attribute
Appliquez l'attribut SerializableAttribute à un type pour indiquer que les instances de ce type peuvent être sérialisées. Le Common Language Runtime lève SerializationException si aucun attribut SerializableAttribute ne s'applique à un type de graphique d'objets en cours de sérialisation.
Appliquez l'attribut SerializableAttribute même si la classe implémente également l'interface ISerializable pour contrôler le processus de sérialisation.
Tous les champs publics et privés d'un type marqués avec SerializableAttribute sont sérialisés par défaut, à moins que le type n'implémente l'interface ISerializable pour substituer le processus de sérialisation. Le processus de sérialisation par défaut exclut des champs marqués à l'aide de l'attribut NonSerializedAttribute. Si un champ d'un type sérialisable contient un pointeur, un handle ou une autre structure de données spécifique à un environnement particulier et ne peut pas être reconstitué de manière significative dans un autre environnement, il est possible d'appliquer l'attribut NonSerializedAttribute à ce champ.
Pour plus d'informations sur l'utilisation des attributs, consultez Extension des métadonnées à l'aide des attributs. Pour plus d'informations sur la sérialisation, consultez System.Runtime.Serialization.
Remarque sur la plateforme Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows CE :
L'attribut SerializableAttribute est présent dans le .NET Compact Framework uniquement à des fins de compatibilité, et sera ignoré s'il est utilisé.
L'exemple suivant illustre la sérialisation d'un objet marqué à l'aide de l'attribut SerializableAttribute. Pour utiliser BinaryFormatter au lieu de SoapFormatter, ne supprimez pas les marques de commentaire appropriées.
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
System..::.Object
System..::.Attribute
System..::.SerializableAttribute
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
.NET Framework
Pris en charge dans : 3.5, 3.0, 2.0, 1.1, 1.0
Référence
Autres ressources