管理者がアプリケーションの設定を変更するために編集できる XML ファイルにシリアル化される設定クラスとして使用しているクラスがあります。(設定は、許可されているよりも少し複雑App.config
です。)
クラスを使用しXmlSerializer
て XML ファイルを逆シリアル化し、プロパティ クラスを設定できるようにしたいのですが、クラス/アセンブリを使用する他の開発者がコードを介してプロパティを設定/変更できるようにしたくありません。XmlSerializer クラスでこれを実現できますか?
さらにいくつかの詳細を追加するには: この特定のクラスは Collection であり、FxCop によると、このクラスはXmlSerializer
読み取り専用コレクションの逆シリアル化を特別にサポートしていますが、これ以上の情報を見つけることができませんでした。これが違反するルールの正確な詳細は次のとおりです。
ユーザーがバッキング ストアを完全に置き換えることができないように、コレクションを返すプロパティは読み取り専用にする必要があります。ユーザーは、コレクションで関連するメソッドを呼び出すことにより、コレクションの内容を変更できます。XmlSerializer クラスは、読み取り専用コレクションの逆シリアル化を特別にサポートしていることに注意してください。詳細については、XmlSerializer の概要を参照してください。
これはまさに私が欲しいものですが、どうすればいいですか?
編集: OK、私はここで少し頭がおかしくなっていると思います。私の場合は、コンストラクターで Collection オブジェクトを初期化し、プロパティ セッターを削除するだけで済みました。次に、XmlSerializable オブジェクトは、Collection オブジェクトで Add/AddRange およびインデクサー プロパティを使用することを実際に認識します。以下は実際に動作します!
public class MySettings
{
private Collection<MySubSettings> _subSettings;
public MySettings()
{
_subSettings = new Collection<MySubSettings>();
}
public Collection<MySubSettings> SubSettings
{
get { return _subSettings; }
}
}