|
分類:[.NET 全般]
C# 2005でやっています。 シリアライズに関する質問をさせていただきます。よろしくお願いします。
基本クラスがISerializableを実装していない場合、派生クラスにはISerializableは実装できないんですか? 具体的には、
// Hogeクラスに特化したリスト class HogeList : List<HogeList>, ISerializable { // なんかのメンバ string _name;
// デシリアライズの際に使われるコンストラクタ public HogeList(SerializationInfo info, StreamingContext context) { // todo : リストの中身を復元
// _nameを復元 n1 = info.GetString("_name"); }
// シリアライズのときに使われるメソッド public void GetObjectData(SerializationInfo info, StreamingContext context) { // todo : リストの中身をシリアル化
// _nameをシリアル化 info.AddValue("_name", _name); } }
みたいに、ISerializableを実装しないList<T>を継承したクラスをシリアライズしたいと思っています。 しかし、todoのところで基本クラスの情報をシリアル化/デシリアル化する正当な方法がわかりません。 MSDNにも
*----- 引用はじめ -----* クラス継承の場合、基本クラスが ISerializable を実装していれば、その派生クラスをシリアル化できます。 この場合、派生クラスは、その GetObjectData 実装の中で、基本クラスに実装されている GetObjectData を呼び出す必要があります。 それ以外の場合、基本クラスからのデータはシリアル化されません。 *----- 引用おわり -----*
って書いてあるし...、無理かなぁ。
継承を使うのがダメで、以下のようにコンポジションを使うべきですかね? class HogeList : IList<Hoge>, ISerializable { List<Hoge> _innerList; string _name;
// 実装の詳細... }
どなたか気が向いたらコメントをお願いします。
|