私はXmlSerializer
C#から使用して、プロパティによって読み取られるいくつかの値を持つクラスを保存しようとしています(コードはフィールド値の単純な取得です)が、セッター関数によって設定されます(値が変更された場合に呼び出されるデリゲートがあるため) )。
私が現在行っているのは、このようなことです。使用目的は、InT
プロパティを使用して値を読み取り、 を使用して値SetInT
を設定することです。設定には副作用があるため、ここではプロパティよりもメソッドが適切です。XmlSerializationOnly_InT
(名前の由来)のためだけに存在し、XmlSerializer
通常のコードでは使用しないでください。
class X
{
public double InT
{
get { return _inT; }
}
public void SetInT(double newInT)
{
if (newInT != _inT)
{
_inT = newInT;
Changed();//includes delegate call; potentially expensive
}
}
private double _inT;
// not called by normal code, as the property set is not just a simple
// field set or two.
[XmlElement(ElementName = "InT")]
public double XmlSerializationOnly_InT
{
get { return InT; }
set { SetInT(value); }
}
}
これは機能し、簡単に実行でき、XML ファイルは期待どおりに表示されます。手作業ですし、ちょっと見苦しいので、少しだけ満足です。私が本当に望んでいるのは、プロパティを使用して値を読み取り、setter 関数を使用して値を設定するように XML シリアライゼーションに指示できるようにすることです。それなら、私はまったく必要ありませんXmlSerializationOnly_InT
。
私はこのようにプロパティ セットとセッター関数を区別することで標準的な慣行に従っているように見えるので、これに遭遇したのは私だけではないと確信しています (Google は私がそうかもしれないと示唆していますが)。この状況で他の人は何をしましたか?XmlSerializer
この種のことをより適切に処理するよう説得する簡単な方法はありますか? そうでない場合、おそらく他の簡単な方法はありますか?