이 설명서는 보관되지만 유지 되지 않습니다.

SerializableAttribute 클래스

업데이트: 2007년 11월

클래스가 serialize될 수 있음을 나타냅니다. 이 클래스는 상속될 수 없습니다.

네임스페이스:  System
어셈블리:  mscorlib(mscorlib.dll)

[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Delegate, Inherited = false)]
public sealed class SerializableAttribute : 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

이 형식의 인스턴스가 serialize될 수 있음을 나타내도록 형식에 SerializableAttribute 특성을 적용합니다. 공용 언어 런타임은 serialize되고 있는 개체 그래프의 형식 중에 SerializableAttribute 특성이 적용되지 않은 형식이 있으면 SerializationException을 throw합니다.

또한 해당 클래스가 ISerializable 인터페이스를 구현하여 serialization 프로세스를 제어하는 경우에도 SerializableAttribute 특성을 적용합니다.

SerializableAttribute로 표시된 형식이 ISerializable 인터페이스를 구현하여 serialization 프로세스를 재정의하지 않는 한, 해당 형식의 모든 public 및 private 필드는 기본적으로 serialize됩니다. 기본 serialization 프로세스에서는 NonSerializedAttribute 특성으로 표시되는 필드를 제외합니다. 포인터, 핸들 또는 특정 환경에 고유하게 적용되며 다른 환경에서 의미 있게 재구성될 수 없는 다른 데이터 구조가 serialize할 수 있는 형식의 필드에 포함된 경우, 해당 필드에 NonSerializedAttribute 특성을 적용할 수도 있습니다.

특성 사용에 대한 자세한 내용은 특성을 사용하여 메타데이터 확장을 참조하십시오. Serialization에 대한 자세한 내용은 System.Runtime.Serialization을 참조하십시오.

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 플랫폼 참고:

SerializableAttribute 특성은 호환성만을 위해 .NET Compact Framework에 있으며 사용해도 무시됩니다.

다음 예제에서는 SerializableAttribute 특성으로 표시된 개체의 serialization을 보여 줍니다. SoapFormatter 대신 BinaryFormatter를 사용하려면 적절한 줄의 주석 처리를 제거합니다.

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);
    }
}


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

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

3.5, 3.0, 2.0, 1.1, 1.0에서 지원
표시: