12

私のアプリケーションは、XmlSerializer を使用してクラスを保存し、後で必要に応じて、再度逆シリアル化してインスタンスを作成します。クラスのいくつかのプロパティ メンバー (逆シリアル化中に割り当てられる) をコンストラクタ ロジックで使用したいと考えています。プロパティが最初に割り当てられ、すべてのプロパティが割り当てられたら、コンストラクターが呼び出されると想定しても問題ありませんか?

このトピックの続きですが、逆シリアル化中に発生する一連のイベントに関するドキュメントはありますか?

4

2 に答える 2

18

いいえ、コンストラクターの実行時にプロパティが設定されると想定するのは適切ではありません。その逆です。コンストラクターは、オブジェクトのインスタンスが作成されたときに実行される最初のコードです。コンストラクターの実行が開始されるまで、プロパティを設定することはできません。

XML デシリアライズ プロセスは、おおまかに次のようになります。

  • パラメーターなしのコンストラクターを呼び出す
  • プロパティを逆シリアル化された値に設定します

これを回避する方法は、ファクトリ メソッドを使用して逆シリアル化を行い、設定されているプロパティに依存するロジックを実行することです。例えば

class MyClass {
  ...
  public static MyClass Deserialize(string xmlContents) {
    var local = ... // Do the XML deserialization
    local.PostCreateLogic();
    return local;
  }
}
于 2011-03-04T19:42:52.667 に答える
0

コンストラクターは、オブジェクトの作成です。プロパティ値を割り当てる前に、オブジェクトを作成する必要があります。次に、コンストラクターが最初に呼び出されます。

シーケンスのドキュメントはわかりません。ただし、クラスがそれほど大きくない場合は、ブレークポイントを追加して、どのイベントが最初であるかを確認できます。

于 2011-03-04T19:46:48.610 に答える