次の方法で共有


NonSerializedAttribute クラス

シリアル化できるクラスのフィールドをシリアル化しないことを示します。このクラスは継承できません。

この型のすべてのメンバの一覧については、NonSerializedAttribute メンバ を参照してください。

System.Object
   System.Attribute
      System.NonSerializedAttribute

<AttributeUsage(AttributeTargets.Field)>
NotInheritable Public Class NonSerializedAttribute   Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Field)]
public sealed class NonSerializedAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Field)]
public __gc __sealed class NonSerializedAttribute : public   Attribute
[JScript]
public
   AttributeUsage(AttributeTargets.Field)
class NonSerializedAttribute extends Attribute

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

NonSerializedAttribute の対象のオブジェクトは、シリアル化できるクラスのパブリック フィールドおよびプライベート フィールドです。既定では、クラスは SerializableAttribute によってマーク付けされていない限り、シリアル化できません。シリアル化処理時には、既定としてクラスのすべてのパブリック フィールドおよびプライベート フィールドがシリアル化されます。シリアル化しないフィールドは、 NonSerializedAttribute でマーク付けすることにより、シリアル化の際にシリアル化処理の対象から除外できます。また、 ISerializable インターフェイスを実装することにより、シリアル化処理を明示的に制御することもできます。 ISerializable を実装しているクラスにも SerializableAttribute でマーク付けする必要があります。

属性の使用方法については、「 属性を使用したメタデータの拡張 」を参照してください。

使用例

[Visual Basic, C#, C++] SerializableAttribute 属性でマーク付けされたオブジェクトのシリアル化と、シリアル化されたオブジェクトでの、 NonSerializedAttribute でマーク付けされたフィールドの動作を、次の例に示します。 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 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

NonSerializedAttribute メンバ | System 名前空間 | SerializableAttribute | Attribute | ISerializable | 属性を使用したメタデータの拡張 | XML シリアル化および SOAP シリアル化