NetDataContractSerializer クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定した .NET Framework 型を使用して、型のインスタンスを 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
- 継承
- 実装
例
次のコード例は、Person
によってシリアル化される NetDataContractSerializer という名前の型を示しています。
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
注釈
セキュリティ
NetDataContractSerializer は安全ではありません。 詳細については、「BinaryFormatter セキュリティ ガイド」をご覧ください。
NetDataContractSerializer は、1 つの重要な点で DataContractSerializer とは異なります。NetDataContractSerializer はシリアル化された XML の中に CLR 型情報を含みますが、DataContractSerializer にはこの情報は含まれません。 したがって、NetDataContractSerializer は、シリアル化と逆シリアル化の両方で、同一の CLR 型を共有する結果になる場合のみ使用できます。
シリアライザーは、DataContractAttribute 属性または SerializableAttribute 属性のいずれかが適用されている型をシリアル化できます。 また、ISerializable を実装する型をシリアル化します。
シリアル化の詳細については、「 シリアル化と逆シリアル化」を参照してください。
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
をフィールドの型またはクラスのプロパティとして使用する場合、フィールドまたはプロパティに含まれるデータはシリアル化されます。 これは、クラスのメンバーとして、データはクラスのトップ レベルではないからです。
コンストラクター
プロパティ
AssemblyFormat |
アセンブリの検索および読み込みをするメソッドを指定する値を取得します。 |
Binder |
クラスの読み込みを制御するオブジェクトを取得または設定します。 |
Context |
シリアル化または逆シリアル化するときに役に立つコンテキスト データを渡すことを可能にするオブジェクトを取得または設定します。 |
IgnoreExtensionDataObject |
オブジェクトの拡張機能により提供されるデータを無視するかどうかを指定する値を取得します。 |
MaxItemsInObjectGraph |
シリアル化されるオブジェクトで許可される項目の最大数を取得します。 |
SurrogateSelector |
シリアル化のサロゲートを選択するときにフォーマッタを支援するオブジェクトを取得または設定します。 |
メソッド
Deserialize(Stream) |
XML ドキュメントまたはストリームをオブジェクトに逆シリアル化します。 |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
IsStartObject(XmlDictionaryReader) |
指定したリーダーを使用して逆シリアル化できるオブジェクトに XmlDictionaryReader が配置されているかどうかを決定します。 |
IsStartObject(XmlReader) |
指定したリーダーを使用して逆シリアル化できるオブジェクトに XmlReader が配置されているかどうかを決定します。 |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ReadObject(Stream) |
Stream を使用して XML ストリームまたはドキュメントを読み取り、逆シリアル化されたオブジェクトを返します。 (継承元 XmlObjectSerializer) |
ReadObject(XmlDictionaryReader) |
XmlDictionaryReader を使用して XML ドキュメントまたはストリームを読み取り、逆シリアル化されたオブジェクトを返します。 (継承元 XmlObjectSerializer) |
ReadObject(XmlDictionaryReader, Boolean) |
XmlDictionaryReader を使用して XML ストリームまたはドキュメントを読み取ります。オブジェクトのデータが、シリアライザーを作成するために使用された名前および名前空間と一致するかどうかもチェックされます。 |
ReadObject(XmlReader) |
XmlDictionaryReader を使用して XML ストリームまたはドキュメントを読み取り、逆シリアル化されたオブジェクトを返します。 |
ReadObject(XmlReader, Boolean) |
XmlDictionaryReader を使用して XML ストリームまたはドキュメントを読み取ります。オブジェクトのデータが、シリアライザーを作成するために使用された名前および名前空間と一致するかどうかもチェックされます。 |
Serialize(Stream, Object) |
指定したライターを使用して、指定したオブジェクトをシリアル化します。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
WriteEndObject(XmlDictionaryWriter) |
XmlDictionaryWriter を使用して、XML の終了要素を書き込みます。 |
WriteEndObject(XmlWriter) |
XmlWriter を使用して、XML の終了要素を書き込みます。 |
WriteObject(Stream, Object) |
Stream を使用して、オブジェクトの完全なコンテンツ (開始、コンテンツ、および終了) を XML ドキュメントまたはストリームに書き込みます。 (継承元 XmlObjectSerializer) |
WriteObject(XmlDictionaryWriter, Object) |
XmlDictionaryWriter を使用して、オブジェクトの完全なコンテンツ (開始、コンテンツ、および終了) を XML ドキュメントまたはストリームに書き込みます。 (継承元 XmlObjectSerializer) |
WriteObject(XmlWriter, Object) |
XmlWriter を使用して、オブジェクトの完全なコンテンツ (開始、コンテンツ、および終了) を XML ドキュメントまたはストリームに書き込みます。 |
WriteObjectContent(XmlDictionaryWriter, Object) |
XmlDictionaryWriter を使用して、XML コンテンツを書き込みます。 |
WriteObjectContent(XmlWriter, Object) |
XmlWriter を使用して、XML コンテンツを書き込みます。 |
WriteStartObject(XmlDictionaryWriter, Object) |
XmlDictionaryWriter を使用して、XML の開始要素を書き込みます。 |
WriteStartObject(XmlWriter, Object) |
XmlWriter を使用して、XML の開始要素を書き込みます。 |
適用対象
こちらもご覧ください
.NET