NetDataContractSerializer 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
제공된 .NET 형식을 사용하여 형식의 인스턴스를 XML 스트림 또는 문서로 직렬화하고 역직렬화합니다. 이 클래스는 상속할 수 없습니다.
public ref class NetDataContractSerializer sealed : System::Runtime::Serialization::XmlObjectSerializer, System::Runtime::Serialization::IFormatter
public sealed class NetDataContractSerializer : System.Runtime.Serialization.XmlObjectSerializer, System.Runtime.Serialization.IFormatter
type NetDataContractSerializer = class
inherit XmlObjectSerializer
interface IFormatter
Public NotInheritable Class NetDataContractSerializer
Inherits XmlObjectSerializer
Implements IFormatter
- 상속
- 구현
예제
다음 예제 코드는 PersonNetDataContractSerializer. 특성이 DataContractAttribute 클래스에 적용되고 DataMemberAttribute 멤버(프라이빗 멤버 포함)에 적용되어 직렬화할 내용을 지시 NetDataContractSerializer 합니다.
// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the NetDataContractSerializer.
[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("NetDataContractSerializerExample.xml");
ReadObject("NetDataContractSerializerExample.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 fs = new FileStream(fileName, FileMode.Create);
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs);
NetDataContractSerializer ser =
new NetDataContractSerializer();
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());
NetDataContractSerializer ser = new NetDataContractSerializer();
// Deserialize the data and read it from the instance.
Person deserializedPerson =
(Person)ser.ReadObject(reader, true);
fs.Close();
Console.WriteLine(String.Format("{0} {1}, ID: {2}",
deserializedPerson.FirstName, deserializedPerson.LastName,
deserializedPerson.ID));
}
}
' You must apply a DataContractAttribute or SerializableAttribute
' to a class to have it serialized by the NetDataContractSerializer.
<DataContract(Name := "Customer", [Namespace] := "http://www.contoso.com")> _
Class Person
Implements IExtensibleDataObject
<DataMember()> _
Public FirstName As String
<DataMember()> _
Public LastName As String
<DataMember()> _
Public ID As Integer
Public Sub New(ByVal newfName As String, ByVal newLName As String, _
ByVal newID As Integer)
FirstName = newfName
LastName = newLName
ID = newID
End Sub
Private extensionData_Value As ExtensionDataObject
Public Property ExtensionData() As ExtensionDataObject _
Implements IExtensibleDataObject.ExtensionData
Get
Return extensionData_Value
End Get
Set
extensionData_Value = value
End Set
End Property
End Class
NotInheritable Public Class Test
Private Sub New()
End Sub
Public Shared Sub Main()
Try
WriteObject("NetDataContractSerializerExample.xml")
ReadObject("NetDataContractSerializerExample.xml")
Catch serExc As SerializationException
Console.WriteLine("Serialization Failed")
Console.WriteLine(serExc.Message)
Catch exc As Exception
Console.WriteLine("The serialization operation failed: {0} StackTrace: {1}", exc.Message, exc.StackTrace)
Finally
Console.WriteLine("Press <Enter> to exit....")
Console.ReadLine()
End Try
End Sub
Public Shared Sub WriteObject(ByVal fileName As String)
Console.WriteLine("Creating a Person object and serializing it.")
Dim p1 As New Person("Zighetti", "Barbara", 101)
Dim fs As New FileStream(fileName, FileMode.Create)
Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateTextWriter(fs)
Dim ser As New System.Runtime.Serialization.NetDataContractSerializer()
ser.WriteObject(writer, p1)
writer.Close()
End Sub
Public Shared Sub ReadObject(ByVal fileName As String)
Console.WriteLine("Deserializing an instance of the object.")
Dim fs As New FileStream(fileName, FileMode.Open)
Dim reader As XmlDictionaryReader = _
XmlDictionaryReader.CreateTextReader(fs, New XmlDictionaryReaderQuotas())
Dim ser As New System.Runtime.Serialization.NetDataContractSerializer()
' Deserialize the data and read it from the instance.
Dim deserializedPerson As Person = CType(ser.ReadObject(reader, True), Person)
fs.Close()
Console.WriteLine(String.Format("{0} {1}, ID: {2}", deserializedPerson.FirstName, deserializedPerson.LastName, deserializedPerson.ID))
End Sub
End Class
설명
Security
NetDataContractSerializer 가 안전하지 않습니다. 자세한 내용은 BinaryFormatter 보안 가이드를 참조하세요.
NetDataContractSerializer DataContractSerializer 한 가지 중요한 방법은 NetDataContractSerializer 직렬화된 XML에 CLR 형식 정보를 포함하는 반면 DataContractSerializer 에는 그렇지 않습니다. 따라서 NetDataContractSerializer 직렬화 및 역직렬화 끝 둘 다 동일한 CLR 형식을 공유하는 경우에만 사용할 수 있습니다.
serializer는 특성 또는 SerializableAttribute 특성이 적용된 형식을 DataContractAttribute 직렬화할 수 있습니다. 또한 구현 ISerializable하는 형식을 직렬화합니다.
serialization에 대한 자세한 내용은 Serialization 및 Deserialization을 참조하세요.
XElement와의 비호환성
클래스 XElement 는 XML을 작성하는 데 사용됩니다. 그러나 형식의 NetDataContractSerializer 인스턴스를 직렬화할 수는 없습니다. 따라서 다음 코드는 예외와 함께 실패합니다. "루트 형식 'System.Xml.Linq.XElement'는 IXmlSerializable IsAny=true 이며 루트 요소를 포함한 모든 콘텐츠를 작성해야 하므로 NetDataContractSerializer에서 최상위 수준에서 지원되지 않습니다."
FileStream fs = new FileStream("mystuff.xml", FileMode.Create, FileAccess.ReadWrite);
XElement myElement = new XElement("Parent", new XElement("child1", "form"),
new XElement("child2", "base"),
new XElement("child3", "formbase")
);
NetDataContractSerializer dcs = new NetDataContractSerializer();
dcs.WriteObject(fs, myElement);
Dim fs As New FileStream("mystuff.xml", FileMode.Create, FileAccess.ReadWrite)
Dim myElement As New XElement("Parent", New XElement("child1", "form"), _
New XElement("child2", "base"), _
New XElement("child3", "formbase") _
)
Dim ser As New System.Runtime.Serialization. _
NetDataContractSerializer()
ser.WriteObject(fs, myElement)
그러나 클래스의 필드 또는 속성 형식으로 사용되는 경우 XElement 필드 또는 속성에 포함된 데이터가 serialize됩니다. 이는 클래스의 멤버로서 데이터가 클래스의 최상위 수준이 아니기 때문입니다.
생성자
속성
| Name | Description |
|---|---|
| AssemblyFormat |
어셈블리를 찾고 로드하는 메서드를 지정하는 값을 가져옵니다. |
| Binder |
클래스 로드를 제어하는 개체를 가져오거나 설정합니다. |
| Context |
직렬화 또는 역직렬화하는 동안 유용한 컨텍스트 데이터를 전달할 수 있도록 하는 개체를 가져오거나 설정합니다. |
| IgnoreExtensionDataObject |
개체의 확장에서 제공하는 데이터가 무시되는지 여부를 지정하는 값을 가져옵니다. |
| MaxItemsInObjectGraph |
직렬화할 개체에 허용되는 최대 항목 수를 가져옵니다. |
| SurrogateSelector |
serialization을 위해 서로게이트를 선택할 때 포맷터를 지원하는 개체를 가져오거나 설정합니다. |
메서드
| Name | Description |
|---|---|
| Deserialize(Stream) |
XML 문서 또는 스트림을 개체로 역직렬화합니다. |
| Equals(Object) |
지정한 개체와 현재 개체가 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
| GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
| GetType() |
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
| IsStartObject(XmlDictionaryReader) |
지정된 판독기를 XmlDictionaryReader 사용하여 역직렬화할 수 있는 개체에 위치할지 여부를 결정합니다. |
| IsStartObject(XmlReader) |
지정된 판독기를 XmlReader 사용하여 역직렬화할 수 있는 개체에 위치할지 여부를 결정합니다. |
| MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
| ReadObject(Stream) |
A와 함께 Stream XML 스트림 또는 문서를 읽고 역직렬화된 개체를 반환합니다. (다음에서 상속됨 XmlObjectSerializer) |
| ReadObject(XmlDictionaryReader, Boolean) |
XML 스트림 또는 문서를 읽고 XmlDictionaryReader 역직렬화된 개체를 반환합니다. 또한 개체 데이터가 serializer를 만드는 데 사용되는 이름 및 네임스페이스를 준수하는지 확인합니다. |
| ReadObject(XmlDictionaryReader) |
XML 문서 또는 스트림을 읽고 XmlDictionaryReader 역직렬화된 개체를 반환합니다. (다음에서 상속됨 XmlObjectSerializer) |
| ReadObject(XmlReader, Boolean) |
XML 스트림 또는 문서를 읽고 XmlDictionaryReader 역직렬화된 개체를 반환합니다. 또한 개체 데이터가 serializer를 만드는 데 사용되는 이름 및 네임스페이스를 준수하는지 확인합니다. |
| ReadObject(XmlReader) |
XML 스트림 또는 문서를 읽고 XmlDictionaryReader 역직렬화된 개체를 반환합니다. |
| Serialize(Stream, Object) |
지정된 작성기를 사용하여 지정된 개체 그래프를 serialize합니다. |
| ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
| WriteEndObject(XmlDictionaryWriter) |
를 사용하여 XmlDictionaryWriter닫는 XML 요소를 씁니다. |
| WriteEndObject(XmlWriter) |
를 사용하여 XmlWriter닫는 XML 요소를 씁니다. |
| WriteObject(Stream, Object) |
지정된 StreamXML 문서 또는 스트림에 개체의 전체 콘텐츠(시작, 콘텐츠 및 끝)를 씁니다. (다음에서 상속됨 XmlObjectSerializer) |
| WriteObject(XmlDictionaryWriter, Object) |
지정된 XmlDictionaryWriterXML 문서 또는 스트림에 개체의 전체 콘텐츠(시작, 콘텐츠 및 끝)를 씁니다. (다음에서 상속됨 XmlObjectSerializer) |
| WriteObject(XmlWriter, Object) |
지정된 XmlWriterXML 문서 또는 스트림에 개체의 전체 콘텐츠(시작, 콘텐츠 및 끝)를 씁니다. |
| WriteObjectContent(XmlDictionaryWriter, Object) |
를 사용하여 XmlDictionaryWriterXML 콘텐츠를 씁니다. |
| WriteObjectContent(XmlWriter, Object) |
를 사용하여 XmlWriterXML 콘텐츠를 씁니다. |
| WriteStartObject(XmlDictionaryWriter, Object) |
를 사용하여 XmlDictionaryWriter여는 XML 요소를 씁니다. |
| WriteStartObject(XmlWriter, Object) |
를 사용하여 XmlWriter여는 XML 요소를 씁니다. |