DefaultValue
適切な動作のために属性を使用してPropertyGrid
います (デフォルトとは異なる値を太字で示しています)。を使用して表示されたオブジェクトをシリアル化する場合XmlSerializer
、デフォルト値を持つプロパティの xml-file にエントリはありません。
これらをまだシリアル化するように XmlSerializer に指示する最も簡単な方法は何ですか?
「バージョン」をサポートするにはそれが必要なので、コードの後半でデフォルト値を変更すると、シリアル化されたプロパティは「最新」のものではなく、シリアル化された値を取得します。私は次のことを考えることができます:
- の動作をオーバーライドします
PropertyGrid
(カスタム属性を使用するため、 によって無視されXmlSerializer
ます); - カスタムの xml-serialization の並べ替えを行い
DefaultValue
ます。 - に渡す前にオブジェクトで何かをして、
XmlSeriazer
が含まれないようにしDefaultValue
ます。
しかし、あまり苦労せずにそれを行うことができるいくつかの秘密のプロパティを見逃す可能性があります = D.
これが私が欲しいものの例です:
private bool _allowNegative = false;
/// <summary>
/// Get or set if negative results are allowed
/// </summary>
[Category(CategoryAnalyse)]
[Admin]
[TypeConverter(typeof(ConverterBoolOnOff))]
//[DefaultValue(false)] *1
public bool AllowNegative
{
get { return _allowNegative; }
set
{
_allowNegative = value;
ConfigBase.OnConfigChanged();
}
}
//public void ResetAllowNegative() { _allowNegative = false; } *2
//public bool ShouldSerializeAllowNegative() { return _allowNegative; } *3
//public bool ShouldSerializeAllowNegative() { return true; } *4
コメントを外すと (*1)、必要な効果が得PropertyGrid
られます。デフォルト値を持つプロパティは通常のテキストで表示されます。それ以外の場合、テキストは太字になります。ただし、デフォルト値のプロパティをxmlファイルに入れません。これはXmlSerializer
悪いことです(そして私はそれを修正しようとしています)。
(※2)と(※3)のコメントを外すと(※1)のコメントを外すのと全く同じです。
(*2) と (*4) のコメントを外すと、XmlSerializer
常にプロパティが xml ファイルに入れられますが、これはデフォルト値がなくなり、PropertyGrid
すべての値が太字で表示されるために発生します。