次の方法で共有


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 シリアル化