SerializableAttribute クラス
クラスをシリアル化できることを示します。このクラスは継承できません。
この型のすべてのメンバの一覧については、SerializableAttribute メンバ を参照してください。
System.Object
System.Attribute
System.SerializableAttribute
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct _
Or AttributeTargets.Enum Or AttributeTargets.Delegate)>
NotInheritable Public Class SerializableAttribute Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Enum | AttributeTargets.Delegate)]
public sealed class SerializableAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Class | AttributeTargets::Struct
| AttributeTargets::Enum | AttributeTargets::Delegate)]
public __gc __sealed class SerializableAttribute : public Attribute
[JScript]
public
AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Enum | AttributeTargets.Delegate)
class SerializableAttribute extends Attribute
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
型に SerializableAttribute 属性を適用して、この型のインスタンスをシリアル化できることを示します。シリアル化されたオブジェクトのグラフで、いずれかの型に SerializableAttribute 属性が適用されていない場合、共通言語ランタイムは SerializationException をスローします。
さらに、クラスがシリアル化処理を制御する ISerializable インターフェイスを実装している場合でも、 SerializableAttribute 属性を適用します。
SerializableAttribute によってマークされた型のすべてのパブリック フィールドとプライベート フィールドは既定でシリアル化されます。ただし、その型がシリアル化処理をオーバーライドする ISerializable インターフェイスを実装していない場合に限ります。既定のシリアル化処理では、 NonSerializedAttribute 属性でマークされたフィールドは除外されます。シリアル化可能な型のフィールドに、特定の環境に固有なポインタ、ハンドル、またはその他のデータ構造体が含まれていて、異なる環境でそのフィールドを再構築しても元通りにならない場合には、そのフィールドに NonSerializedAttribute 属性を適用できます。
属性の使用方法については、「 属性を使用したメタデータの拡張 」を参照してください。シリアル化の詳細については、「 System.Runtime.Serialization 名前空間 」を参照してください。
使用例
[Visual Basic, C#, C++] SerializableAttribute 属性でマーク付けされたオブジェクトをシリアル化する例を次に示します。 SoapFormatter の代わりに BinaryFormatter を使用する場合は、必要な行のコメント記号を外してください。
Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
''Imports System.Runtime.Serialization.Formatters.Binary
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()
''Dim formatter As New BinaryFormatter()
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()
''formatter = New BinaryFormatter()
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
[C#]
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);
}
}
[C++]
#using <mscorlib.dll>
#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]
__gc class TestSimpleObject
{
int member1;
String* member2;
String* member3;
double member4;
public:
// A field that is not serialized.
[NonSerialized] String* member5;
TestSimpleObject()
{
member1 = 11;
member2 = S"hello";
member3 = S"hello";
member4 = 3.14159265;
member5 = S"hello world!";
}
void Print()
{
Console::WriteLine(S"member1 = ' {0}'", __box(member1));
Console::WriteLine(S"member2 = ' {0}'", member2);
Console::WriteLine(S"member3 = ' {0}'", member3);
Console::WriteLine(S"member4 = ' {0}'", __box(member4));
Console::WriteLine(S"member5 = ' {0}'", member5);
}
};
int main()
{
//Creates a new TestSimpleObject object.
TestSimpleObject* obj = new TestSimpleObject();
Console::WriteLine(S"Before serialization the Object* contains: ");
obj->Print();
//Opens a file and serializes the object into it in binary format.
Stream* stream = File::Open(S"data.xml", FileMode::Create);
SoapFormatter* formatter = new SoapFormatter();
//BinaryFormatter* formatter = new BinaryFormatter();
formatter->Serialize(stream, obj);
stream->Close();
//Empties obj.
obj = 0;
//Opens file S"data.xml" and deserializes the object from it.
stream = File::Open(S"data.xml", FileMode::Open);
formatter = new SoapFormatter();
//formatter = new BinaryFormatter();
obj = dynamic_cast<TestSimpleObject*>(formatter->Deserialize(stream));
stream->Close();
Console::WriteLine(S"");
Console::WriteLine(S"After deserialization the object contains: ");
obj->Print();
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: Mscorlib (Mscorlib.dll 内)
参照
SerializableAttribute メンバ | System 名前空間 | Attribute | ISerializable | NonSerializedAttribute | 属性を使用したメタデータの拡張 | XML シリアル化および SOAP シリアル化