全体表示

[ リスト ]

【C#】シリアライズ/デシリアライズ (Serialize/Deserialize)

シリアライズ / デシリアライズ

あるクラスから生成したオブジェクトを...

■シリアライズ(シリアル化)
 => ファイルなどに保存できる形式に変換すること

■デシリアライズ(逆シリアル化)
 => ファイルなどから復元できる形式に変換すること

実現方法

DataContractSerializerを使えば実現可能。(.NET3.0から)

 [1] 「System.Runtime.Serialization」を参照追加する
 [2] シリアル化する対象のクラスとその属性に、
    「DataContract」、「DataMember」を以下のサンプルのように各々付加させる

使用上の注意

 * DataMemberを付加させないと、シリアル化の対象にならない
 * 類似したクラスにXmlSerializerがあるが、シリアル化効率が悪く、シリアル化できる型も限られる

サンプル

[DataContract]
public class Person
{
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public int Age { get; set; }

    public Person(string newName, int newAge)
    {
        this.Name = newName;
        this.Age = newAge;
    }
}

public static T Copy<T>(T source) where T : class
{
    T result = null;
    using (var ms = new System.IO.MemoryStream())
    {
         // Serializer the User object to the stream.
         DataContractSerializer ser = new DataContractSerializer(typeof(T));
         ser.WriteObject(ms, source);
         ms.Position = 0;
         result = ser.ReadObject(ms) as T;
    }
    return result;
}

サンプル

シリアライズ
public static Stream Serialize<T>(T target) 
{
     var formatter = new BinaryFormatter();
     var stream = new MemoryStream();
     formatter.Serialize(stream, target);

     stream.Seek(0, SeekOrigin.Begin);
     return stream;
}

サンプル

デシリアライズ
public static T Deserialize<T>(Stream target) 
{
     var formatter = new BinaryFormatter();
     T returnValue = (T) formatter.Deserialize(target);

     return returnValue;
}

その他

Enumの場合

 * EnumMemberAttribute([EnumMember]) を使用する


関連記事

ジェネリック 〜<T>型〜

http://blogs.yahoo.co.jp/dk521123/22167448.html

「C#・中級編」書庫の記事一覧

閉じる コメント(0) ※投稿されたコメントはブログ開設者の承認後に公開されます。

コメント投稿
名前パスワードブログ
絵文字
×
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

閉じる トラックバック(0) ※トラックバックはブログ開設者の承認後に公開されます。

トラックバックされた記事

トラックバックされている記事がありません。

トラックバック先の記事

  • トラックバック先の記事がありません。
PR

.
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
 今日全体
訪問者793368907
ブログリンク00
コメント029
トラックバック04

友だち(2人)
Yahoo Image

人気度

ヘルプ

Yahoo Image

最大1万ポイントが1万名に当たる
毎月60万ポイントをブロガーで山分け

PR


プライバシーポリシー -  利用規約 -  ガイドライン -  順守事項 -  ヘルプ・お問い合わせ

Copyright (C) 2013 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事