0

オブジェクトのクローンを作成するために、.NET でバイナリ シリアル化を使用しています。<Serializable()>シリアライザーがクラスを処理するために、属性でマークする必要がある独自のクラス。ただし、これは任意のオブジェクトで使用される関数であるため、私は疑問に思っていました:

<Serializable()>属性でマークされていなくても、シリアライザーにオブジェクトをシリアライズさせることは可能ですか? そうでない場合、属性を任意のクラスに「自動適用」する方法はありますか?

編集。私の主な関心事は、.NET Framework に既に存在する POCO オブジェクトを複製できるようにする必要があるということです。それらはすべてすでにシリアライズ可能ですか?

4

5 に答える 5

2

クラスがどのように実装されているかを知らずにシリアライズするのは安全ではありません。そのため、クラス デザイナーは意図的にSerializable属性を追加し、これが安全な操作であることをランタイムに知らせる必要があります。その属性を任意のクラスに自動的に追加することは、おそらく悪い考えです。

ではないクラスをシリアライズする必要がある場合はSerializable、手動で行うことができます。

  1. 問題クラスを別の表現に変換したり、別の表現から変換したりする方法を見つけてください。
  2. その他のクラスをシリアル化に使用し、必要に応じて前後に変換します。

それができない場合は、シリアル化以外の状態を保持する他の方法を検討する必要があります。

于 2010-11-23T14:40:55.673 に答える
0

実行時に属性を変更することはできません。ソースのみ。

于 2010-11-23T14:28:58.227 に答える
0

リフレクションを使用して、任意のクラス/インスタンスのプロパティを反復処理できます。ただし、カスタムシリアライザーを作成する必要があります。

于 2010-11-23T14:31:11.020 に答える
0

.NET フレームワーク自体は、通常、これが意味のあるすべてのクラスと構造体でシリアル化のサポートを提供します。そのため、フレームワーク自体のクラスはクローン作成で正常に機能する可能性があります。ただし、サードパーティのライブラリを使用すると問題が発生する可能性があります。残念ながら、サードパーティのライブラリには適切なシリアル化がサポートされていないことがよくあります。

于 2010-11-23T14:39:27.933 に答える
0

typeof(yourType).IsSerializable... の使用を検討してください。

于 2010-11-23T14:52:46.650 に答える