Я использую атрибут DefaultValue
для правильного поведения PropertyGrid
(он отображает значения, отличные от значения по умолчанию, выделенные полужирным шрифтом). Теперь, если я хочу сериализовать показанный объект с использованием XmlSerializer
, не будет записей в xml файле для свойств со значениями по умолчанию.
Что самый простой способ рассказать XmlSerializer о сериализации этих данных?
Мне нужно, чтобы поддерживать "версии", поэтому, когда я изменяю значение по умолчанию позже в коде, сериализованное свойство получает значение, с которым оно сериализовалось, а не "последнее". Я могу думать о следующем:
- Отменить поведение
PropertyGrid
(использовать пользовательский атрибут, поэтому он будет игнорироватьсяXmlSerializer
); - Сделайте вид пользовательской xml-сериализации, где игнорируются
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
- свойства со значениями по умолчанию отображаются в обычном тексте, иначе текст выделен жирным шрифтом. Однако XmlSerializer
будет NOT помещать свойства со значением по умолчанию в xml файл, и это BAD (и я пытаюсь его исправить).
Если я раскомментирую (* 2) и (* 3), то он полностью совпадает с раскомментированием (* 1).
Если я раскомментирую (* 2) и (* 4), то XmlSerializer
всегда будет помещать свойства в xml файл, но это происходит потому, что они больше не имеют значения по умолчанию и PropertyGrid
показывает все значения жирным шрифтом.