タイトル一覧   関連タグ: Win C#
タグ:Win C# タイトル:internalなクラスに、シリアライズしたい
1 2 3 4
1:  お名前:石野光仁 2005/02/23 13:36:44

こんにちは、アイライトの石野です。

件名のとおりなのですが、
internalなクラスに、シリアライズを行おうとすると、
以下の例外が発生するんですよね。

>保護レベルの設定が原因で 'クラス名' にアクセスできません。
>パブリックの型のみ処理できます。

やりたい事としては、シリアライズに利用するクラスを
外部に見せたくないというだけなのですが、別の方法を
取るとして、解決するにはどんな方法があるのでしょうか?
ヒントなんかを頂けたら、助かります。
2:  お名前:中 博俊 2005/02/23 14:35:07

何シリアライズですか?(w
基本的にシリアライザが反映させたりと言うものもPublicを経由して行うので、ALLPublicが基本かと

実際に使うクラスとシリアライズ用のクラスを分けて、シリアライズするときに型変換(というかCopy)かけてそいつをシリアライズすればOK
3:  お名前:菊池 2005/02/23 14:45:34

ISerializeable を自分で実装しても出ますか?

リフレクションで探せなくなるので自分でISerializeableを実装しなければならないと思います。

4:  お名前:石野光仁 2005/02/24 9:50:58

こんにちは、アイライトの石野です。

あきらめました。 キッパリ。
自分だけで使う、コンポーネントですので、無理しないことにしました。
#この辺がスキルアップに繋がらないんだろうな、、、 と反省。
5:  お名前:渋木宏明(ひどり) 2005/02/24 10:08:27

ISerializable を実装するのでは駄目でした?

「そこまでするほどのものでもない」なら、すっぱりあきらめて別な方法(設定保存?)を考える方が清々しいかも。

6:  お名前:石野光仁 2005/02/24 11:17:05

ISerializable
をちょっと調べてみたのですが、上手くサンプルを作ることが出来なくて
保留にしちゃいました。
7:  お名前:菊池 2005/02/24 11:37:41

逃げたな…

[Serializeable]
class Hoge : ISerializeable
{
  int Hage;

  public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
  {
  info.AddValue( "Hage",hage );
  }
 
  protected Hoge( SerializationInfo info, StreamingContext context)
  {
  hage = info.GetInt32( "Hage" );
  }
}

context はシカトで info とやり取りすればよろし。
保存がGetObjectDataで、復元は protected コンストラクタになります。


8:  お名前:石野光仁 2005/02/24 11:40:05

う” つかまった。。。

ありがとうございます。 後で確認してみます。
9:  お名前:渋木宏明(ひどり) 2005/02/24 11:46:08

(大笑)

10:  お名前:中 博俊 2005/02/24 13:42:16

(^o^
1 2 3 4
お名前
メッセージ
次回のために入力情報を記録