Personカスタムクラスをシリアル化/逆シリアル化する例。
シリアル化対象のクラス(ここではPerson)はpublicにしておく。
メモリーストリームによるXMLシリアル化
メモリーストリームによるシリアル化(XML)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//メモリーストリームにXMLデータを出力する <strong>using System.Xml; using System.Xml.Serialization;</strong> var person = New Person(...); var stream = new MemoryStream(); using(var writer = XmlWriter.Create(stream)) { var serializer = new <strong>XmlSerializer</strong>(person.GetType()); serializer.<strong>Serialize</strong>(writer, person); } |
メモリーストリームによる逆シリアル化(XML)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//メモリーストリームに保存したXMLデータを逆シリアル化 <strong>using System.Xml; using System.Xml.Serializatio</strong>n; //まずメモリーストリームをToArray()でByte配列に変換する。 <strong>var arr = stream.ToArray();</strong> //XmlReader.Create()の引数にnew MemoryStream(arr)を渡す using (var reader = <strong>XmlReader.Create(new MemoryStream(arr))</strong>) { var serializer = new <strong>XmlSerializer</strong>(typeof(Person)); //Deserializeの戻り値はObject型なのでpersonクラスにキャストする var person2 = serializer.<strong>Deserialize</strong>(reader) as Person; Console.WriteLine(person2); } |
メモリーストリームによるJSONシリアル化
古いので後で書き直しor追記します。
メモリーストリームによるシリアル化(JSON)
1 2 3 4 5 6 7 8 9 |
//メモリーストリームにJSONデータを出力する <strong>using System.Runtime.Serialization.Json; </strong> var person = New Person(...); var mem = new MemoryStream(); var serializer = new <strong>DataContractJsonSerializer</strong>(person.GetType()); serializer.WriteObject(mem, person); |
メモリーストリームによる逆シリアル化(JSON)
1 2 3 4 5 6 7 8 9 10 11 12 |
//メモリーストリームに保存したJSONデータを逆シリアル化する <strong>using System.Runtime.Serialization.Json;</strong> //メモリーストリームをバイト配列に変換し引数に渡す <strong>var arr = mem.ToArray();</strong> using (var stream = <strong>new MemoryStream(arr)</strong>) { var serializer2 = new <strong>DataContractJsonSerializer</strong>(typeof(Person)); var person2 = serializer2.<strong>ReadObject</strong>(stream) as Person; Console.WriteLine(person2); } |