이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

DataContractSerializer 클래스

 

게시 날짜: 2016년 11월

제공된 데이터 계약을 사용하여 특정 형식의 인스턴스를 XML 스트림 또는 문서로 serialize하거나 deserialize합니다. 이 클래스는 상속될 수 없습니다.

네임스페이스:   System.Runtime.Serialization
어셈블리:  System.Runtime.Serialization(System.Runtime.Serialization.dll에 있음)

System.Object
  System.Runtime.Serialization.XmlObjectSerializer
    System.Runtime.Serialization.DataContractSerializer

public sealed class DataContractSerializer : XmlObjectSerializer

이름설명
System_CAPS_pubmethodDataContractSerializer(Type)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다.

System_CAPS_pubmethodDataContractSerializer(Type, DataContractSerializerSettings)

새 인스턴스를 초기화는 DataContractSerializer 클래스를 serialize 하거나 지정 된 형식 및 설정의 개체를 deserialize 합니다.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체와 개체 그래프에 있을 수 있는 알려진 형식의 컬렉션을 serialize하거나 deserialize합니다.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다. 또한 이 메서드는 개체 그래프에 있을 수 있는 알려진 형식의 목록, serialize할 최대 그래프 항목 수, 예기치 않은 데이터를 무시할 매개 변수, 비표준 XML 구문을 사용하여 그래프에서 개체 참조 데이터를 유지할지 여부, 사용자 지정 serialization을 위한 서로게이트를 지정합니다.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다. 또한이 메서드는 개체 그래프를 그래프를 예기치 않은 데이터를 무시할 매개 변수를 serialize 하는 항목의 최대 수에 있을 수 있는 알려진 형식의 목록을 지정, 그래프, 사용자 지정 serialization 위한 서로게이트 및 매핑하기 위한 대안에 개체 참조 데이터를 유지 하기 위해 구문 비표준 XML을 사용할 것인지 xsi:type 런타임에 선언 합니다.

System_CAPS_pubmethodDataContractSerializer(Type, String, String)

제공된 XML 루트 요소 및 네임스페이스를 사용하여 지정된 형식의 개체를 serialize하거나 deserialize하기 위해 DataContractSerializer 클래스의 새 인스턴스를 초기화합니다.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다. 이 메서드는 두 문자열 매개 변수에 루트 XML 요소와 네임스페이스를 지정하고, 개체 그래프에 있을 수 있는 알려진 형식의 목록을 지정합니다.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다. 또한 이 메서드는 개체 그래프에 있을 수 있는 알려진 형식의 목록, serialize할 최대 그래프 항목 수, 예기치 않은 데이터를 무시할 매개 변수, 비표준 XML 구문을 사용하여 그래프에서 개체 참조 데이터를 유지할지 여부, 사용자 지정 serialization을 위한 서로게이트 및 콘텐츠가 들어 있는 XML 요소와 네임스페이스를 지정합니다.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다. 또한이 메서드는 개체 그래프를 그래프를 예기치 않은 데이터를 무시할 매개 변수를 serialize 하는 항목의 최대 수에 있을 수 있는 알려진 형식의 목록을 지정, 사용자 지정 serialization, XML 요소 및 해당 내용과 매핑하기 위한 대안을 포함 하는 네임 스페이스에 대 한 서로게이트, 그래프에서 개체 참조 데이터를 유지 하기 위해 구문 비표준 XML을 사용할 것인지 xsi:type 런타임에 선언 합니다.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)

DataContractSerializer 형식 매개 변수를 통해 지정된 XML 루트 요소 및 네임스페이스를 사용하여 지정된 형식의 개체를 serialize하거나 deserialize하기 위해 XmlDictionaryString 클래스의 새 인스턴스를 초기화합니다.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다. 이 메서드는 두 개의 XmlDictionaryString 매개 변수에 루트 XML 요소와 네임스페이스를 지정하고, 개체 그래프에 있을 수 있는 알려진 형식의 목록을 지정합니다.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다. 또한 이 메서드는 개체 그래프에 있을 수 있는 알려진 형식의 목록, serialize할 최대 그래프 항목 수, 예기치 않은 데이터를 무시할 매개 변수, 비표준 XML 구문을 사용하여 그래프에서 개체 참조 데이터를 유지할지 여부, 사용자 지정 serialization을 위한 서로게이트, 콘텐츠가 포함된 XML 요소와 네임스페이스를 지정하는 XmlDictionaryString의 매개 변수를 지정합니다.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

DataContractSerializer 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체를 serialize하거나 deserialize합니다. 또한이 메서드는 개체 그래프를 그래프를 예기치 않은 데이터를 무시할 매개 변수를 serialize 하는 항목의 최대 수에 있을 수 있는 알려진 형식의 목록을 지정, 매개 변수를 사용자 지정 serialization 위한 서로게이트를 그래프에서 개체 참조 데이터를 유지 하기 위해 구문 비표준 XML을 사용할 것인지 XmlDictionaryString XML 요소 및 콘텐츠를 포함 하는 네임 스페이스를 지정 하는 및 매핑하기 위한 대안 xsi:type 런타임에 선언 합니다.

이름설명
System_CAPS_pubpropertyDataContractResolver

동적으로 매핑하는 데 사용 되는 구성 요소를 가져옵니다 xsi:type 알려진된 계약 형식으로 선언 합니다.

System_CAPS_pubpropertyDataContractSurrogate

serialization 또는 deserialization 프로세스를 확장할 수 있는 서로게이트 형식을 가져옵니다.

System_CAPS_pubpropertyIgnoreExtensionDataObject

클래스를 serialize하거나 deserialize할 때 해당 클래스의 확장에서 제공하는 데이터를 무시하는지 여부를 나타내는 값을 가져옵니다.

System_CAPS_pubpropertyKnownTypes

DataContractSerializer의 이 인스턴스를 사용하여 serialize된 개체 그래프에 있을 수 있는 형식 컬렉션을 가져옵니다.

System_CAPS_pubpropertyMaxItemsInObjectGraph

개체 그래프에서 serialize하거나 deserialize할 최대 항목 수를 가져옵니다.

System_CAPS_pubpropertyPreserveObjectReferences

비표준 XML 구문을 사용하여 개체 참조 데이터를 유지할지 여부를 지정하는 값을 가져옵니다.

System_CAPS_pubpropertySerializeReadOnlyTypes

읽기 전용 형식을 직렬화할지 여부를 지정 하는 값을 가져옵니다.

이름설명
System_CAPS_pubmethodEquals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.(Object에서 상속됨)

System_CAPS_pubmethodGetHashCode()

기본 해시 함수로 작동합니다.(Object에서 상속됨)

System_CAPS_pubmethodGetType()

현재 인스턴스의 Type을 가져옵니다.(Object에서 상속됨)

System_CAPS_pubmethodIsStartObject(XmlDictionaryReader)

deserialize할 수 있는 개체에 XmlDictionaryReader가 배치되는지 여부를 확인합니다.(XmlObjectSerializer.IsStartObject(XmlDictionaryReader)을(를) 재정의함)

System_CAPS_pubmethodIsStartObject(XmlReader)

deserialize할 수 있는 개체에 XmlReader가 배치되는지 여부를 확인합니다.(XmlObjectSerializer.IsStartObject(XmlReader)을(를) 재정의함)

System_CAPS_pubmethodReadObject(Stream)

Stream을 사용하여 XML 스트림 또는 문서를 읽고 deserialize된 개체를 반환합니다.(XmlObjectSerializer에서 상속됨)

System_CAPS_pubmethodReadObject(XmlDictionaryReader)

XmlDictionaryReader를 사용하여 XML 문서 또는 스트림을 읽고 deserialize된 개체를 반환합니다.(XmlObjectSerializer에서 상속됨)

System_CAPS_pubmethodReadObject(XmlDictionaryReader, Boolean)

XmlDictionaryReader를 사용하여 XML 스트림을 읽고 deserialize된 개체를 반환하며, 값을 읽기 전에 개체 이름을 확인하는지 여부도 지정합니다.(XmlObjectSerializer.ReadObject(XmlDictionaryReader, Boolean)을(를) 재정의함)

System_CAPS_pubmethodReadObject(XmlDictionaryReader, Boolean, DataContractResolver)

XML 문서나 문서 스트림을 읽고 deserialize된 개체를 반환합니다. 유효성이 검사 되는 개체 이름 확인 되는지 여부를 지정 하는 매개 변수 및 매핑에 대 한 해결 프로그램 메서드 포함 xsi:type 런타임에 선언 합니다.

System_CAPS_pubmethodReadObject(XmlReader)

XmlReader를 사용하여 XML 스트림을 읽고 deserialize된 개체를 반환합니다.(XmlObjectSerializer.ReadObject(XmlReader)을(를) 재정의함)

System_CAPS_pubmethodReadObject(XmlReader, Boolean)

XmlReader를 사용하여 XML 스트림을 읽고 deserialize된 개체를 반환하며, 값을 읽기 전에 개체 이름을 확인하는지 여부도 지정합니다.(XmlObjectSerializer.ReadObject(XmlReader, Boolean)을(를) 재정의함)

System_CAPS_pubmethodToString()

현재 개체를 나타내는 문자열을 반환합니다.(Object에서 상속됨)

System_CAPS_pubmethodWriteEndObject(XmlDictionaryWriter)

XmlDictionaryWriter를 사용하여 닫기 XML 요소를 씁니다.(XmlObjectSerializer.WriteEndObject(XmlDictionaryWriter)을(를) 재정의함)

System_CAPS_pubmethodWriteEndObject(XmlWriter)

XmlWriter를 사용하여 닫기 XML 요소를 씁니다.(XmlObjectSerializer.WriteEndObject(XmlWriter)을(를) 재정의함)

System_CAPS_pubmethodWriteObject(Stream, Object)

지정된 Stream를 사용하여 XML 문서 또는 스트림에 개체의 전체 콘텐츠(시작, 콘텐츠, 끝)를 씁니다.(XmlObjectSerializer에서 상속됨)

System_CAPS_pubmethodWriteObject(XmlDictionaryWriter, Object)

지정된 XmlDictionaryWriter를 사용하여 XML 문서 또는 스트림에 개체의 전체 콘텐츠(시작, 콘텐츠, 끝)를 씁니다.(XmlObjectSerializer에서 상속됨)

System_CAPS_pubmethodWriteObject(XmlDictionaryWriter, Object, DataContractResolver)

지정된 XmlDictionaryWriter를 사용하여 XML 문서 또는 스트림에 모든 개체 데이터(시작 XML 요소, 콘텐츠, 포함 요소)를 씁니다. 매핑에 대 한 확인자를 포함 하는 메서드 xsi:type 런타임에 선언 합니다.

System_CAPS_pubmethodWriteObject(XmlWriter, Object)

XmlWriter를 사용하여 XML 문서 또는 스트림에 모든 개체 데이터(시작 XML 요소, 콘텐츠, 닫기 요소)를 씁니다.(XmlObjectSerializer.WriteObject(XmlWriter, Object)을(를) 재정의함)

System_CAPS_pubmethodWriteObjectContent(XmlDictionaryWriter, Object)

XmlDictionaryWriter를 사용하여 XML 콘텐츠를 씁니다.(XmlObjectSerializer.WriteObjectContent(XmlDictionaryWriter, Object)을(를) 재정의함)

System_CAPS_pubmethodWriteObjectContent(XmlWriter, Object)

XmlWriter를 사용하여 XML 콘텐츠를 씁니다.(XmlObjectSerializer.WriteObjectContent(XmlWriter, Object)을(를) 재정의함)

System_CAPS_pubmethodWriteStartObject(XmlDictionaryWriter, Object)

XmlDictionaryWriter를 사용하여 열기 XML 요소를 씁니다.(XmlObjectSerializer.WriteStartObject(XmlDictionaryWriter, Object)을(를) 재정의함)

System_CAPS_pubmethodWriteStartObject(XmlWriter, Object)

XmlWriter를 사용하여 열기 XML 요소를 씁니다.(XmlObjectSerializer.WriteStartObject(XmlWriter, Object)을(를) 재정의함)

Use the T:System.Runtime.Serialization.DataContractSerializer class to serialize and deserialize instances of a type into an XML stream or document. For example, you can create a type named Person with properties that contain essential data, such as a name and address. You can then create and manipulate an instance of the Person class and write all of its property values in an XML document for later retrieval, or in an XML stream for immediate transport. Most important, the T:System.Runtime.Serialization.DataContractSerializer is used to serialize and deserialize data sent in indigo1 messages. Apply the T:System.Runtime.Serialization.DataContractAttribute attribute to classes, and the T:System.Runtime.Serialization.DataMemberAttribute attribute to class members to specify properties and fields that are serialized.

목록은 types that can be serialized, see 데이터 계약 Serializer에서 지원하는 형식.

To use the T:System.Runtime.Serialization.DataContractSerializer, first create an instance of a class and an object appropriate to writing or reading the format; for example, an instance of the T:System.Xml.XmlDictionaryWriter. Then call the M:System.Runtime.Serialization.XmlObjectSerializer.WriteObject(System.Xml.XmlDictionaryWriter,System.Object) method to persist the data. To retrieve data, create an object appropriate to reading the data format (such as an T:System.Xml.XmlDictionaryReader for an XML document) and call the Overload:System.Runtime.Serialization.DataContractSerializer.ReadObject method.

추가 정보 using the DataContractSerializer, see Serialization 및 Deserialization.

You can set the type of a data contract serializer using the <dataContractSerializer> element in a client application configuration file.

The T:System.Runtime.Serialization.DataContractSerializer is used in combination with the T:System.Runtime.Serialization.DataContractAttribute and T:System.Runtime.Serialization.DataMemberAttribute classes. To prepare a class for serialization, apply the T:System.Runtime.Serialization.DataContractAttribute to the class. For each member of the class that returns data that you want to serialize, apply the T:System.Runtime.Serialization.DataMemberAttribute. You can serialize fields and properties, regardless of accessibility: private, protected, internal, protected internal, or public.

For example, your schema specifies a Customer with an ID property, but you already have an existing application that uses a type named Person with a Name property. To create a type that conforms to the contract, first apply the T:System.Runtime.Serialization.DataContractAttribute to the class. Then apply the T:System.Runtime.Serialization.DataMemberAttribute to every field or property that you want to serialize.

System_CAPS_note참고

You can apply the T:System.Runtime.Serialization.DataMemberAttribute to both private and public members.

The final format of the XML need not be text. Instead, the T:System.Runtime.Serialization.DataContractSerializer writes the data as an XML infoset, which allows you to write the data to any format recognized by the T:System.Xml.XmlReader and T:System.Xml.XmlWriter. It is recommended that you use the T:System.Xml.XmlDictionaryReader and T:System.Xml.XmlDictionaryWriter classes to read and write, because both are optimized to work with the T:System.Runtime.Serialization.DataContractSerializer.

If you are creating a class that has fields or properties that must be populated before the serialization or deserialization occurs, use callback attributes, as described in Version Tolerant Serialization Callbacks.

When serializing or deserializing an object, it is required that the type is "known" to the T:System.Runtime.Serialization.DataContractSerializer. Begin by creating an instance of a class that implements T:System.Collections.Generic.IEnumerable`1 (such as T:System.Collections.Generic.List`1) and adding the known types to the collection. Then create an instance of the T:System.Runtime.Serialization.DataContractSerializer using one of the overloads that takes the T:System.Collections.Generic.IEnumerable`1 (for example, M:System.Runtime.Serialization.DataContractSerializer.#ctor(System.Type,System.Collections.Generic.IEnumerable{System.Type}).

System_CAPS_note참고

Unlike other primitive types, the T:System.DateTimeOffset structure is not a known type by default, so it must be manually added to the list of known types (see Data Contract Known Types).

The T:System.Runtime.Serialization.DataContractSerializer understands data contracts that have been designed to be compatible with future versions of the contract. Such types implement the T:System.Runtime.Serialization.IExtensibleDataObject interface. The interface features the P:System.Runtime.Serialization.IExtensibleDataObject.ExtensionData property that returns an T:System.Runtime.Serialization.ExtensionDataObject object. crdefaultForward Compatible Data Contracts.

When instantiating the target object during deserialization, the T:System.Runtime.Serialization.DataContractSerializer does not call the constructor of the target object. If you author a [DataContract] type that is accessible from partial trust (that is, it is public and in an assembly that has the AllowPartiallyTrustedCallers attribute applied) and that performs some security-related actions, you must be aware that the constructor is not called. In particular, the following techniques do not work:

  • If you try to restrict partial trust access by making the constructor internal or private, or by adding a LinkDemand to the constructor -- neither of these have any effect during deserialization under partial trust.

  • If you code the class that assumes the constructor has run, the class may get into an invalid internal state that is exploitable.

The following example code shows a type named Person that is serialized by the T:System.Runtime.Serialization.DataContractSerializer. The T:System.Runtime.Serialization.DataContractAttribute attribute is applied to the class, and the T:System.Runtime.Serialization.DataMemberAttribute is applied to members to instruct the T:System.Runtime.Serialization.DataContractSerializer what to serialize.

namespace DataContractSerializerExample
{
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Runtime.Serialization;
    using System.Xml;

    // You must apply a DataContractAttribute or SerializableAttribute
    // to a class to have it serialized by the DataContractSerializer.
    [DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
    class Person : IExtensibleDataObject
    {
        [DataMember()]
        public string FirstName;
        [DataMember]
        public string LastName;
        [DataMember()]
        public int ID;

        public Person(string newfName, string newLName, int newID)
        {
            FirstName = newfName;
            LastName = newLName;
            ID = newID;
        }

        private ExtensionDataObject extensionData_Value;

        public ExtensionDataObject ExtensionData
        {
            get
            {
                return extensionData_Value;
            }
            set
            {
                extensionData_Value = value;
            }
        }
    }

    public sealed class Test
    {
        private Test() { }

        public static void Main()
        {
            try
            {
                WriteObject("DataContractSerializerExample.xml");
                ReadObject("DataContractSerializerExample.xml");

            }

            catch (SerializationException serExc)
            {
                Console.WriteLine("Serialization Failed");
                Console.WriteLine(serExc.Message);
            }
            catch (Exception exc)
            {
                Console.WriteLine(
                "The serialization operation failed: {0} StackTrace: {1}",
                exc.Message, exc.StackTrace);
            }

            finally
            {
                Console.WriteLine("Press <Enter> to exit....");
                Console.ReadLine();
            }
        }

        public static void WriteObject(string fileName)
        {
            Console.WriteLine(
                "Creating a Person object and serializing it.");
            Person p1 = new Person("Zighetti", "Barbara", 101);
            FileStream writer = new FileStream(fileName, FileMode.Create);
            DataContractSerializer ser =
                new DataContractSerializer(typeof(Person));
            ser.WriteObject(writer, p1);
            writer.Close();
        }

        public static void ReadObject(string fileName)
        {
            Console.WriteLine("Deserializing an instance of the object.");
            FileStream fs = new FileStream(fileName,
            FileMode.Open);
            XmlDictionaryReader reader =
                XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
            DataContractSerializer ser = new DataContractSerializer(typeof(Person));

            // Deserialize the data and read it from the instance.
            Person deserializedPerson =
                (Person)ser.ReadObject(reader, true);
            reader.Close();
            fs.Close();
            Console.WriteLine(String.Format("{0} {1}, ID: {2}",
            deserializedPerson.FirstName, deserializedPerson.LastName,
            deserializedPerson.ID));
        }
    }

유니버설 Windows 플랫폼
8 이후 사용 가능
.NET Framework
3.0 이후 사용 가능
이식 가능한 클래스 라이브러리
이식 가능한 .NET 플랫폼 에서 지원됨
Silverlight
2.0 이후 사용 가능
Windows Phone Silverlight
7.0 이후 사용 가능
Windows Phone
8.1 이후 사용 가능

Instances of this class are thread safe except when the instance is used with an implementation of the T:System.Runtime.Serialization.IDataContractSurrogate or T:System.Runtime.Serialization.DataContractResolver.

맨 위로 이동
표시: