Как сказать XmlSerializer всегда сериализовать свойства с [DefautValue (…)]?
я используюDefaultValue
атрибут для правильногоPropertyGrid
поведение (оно показывает значения, отличающиеся от значения по умолчанию, выделенного жирным шрифтом) Теперь, если я хочу сериализовать показанный объект с использованиемXmlSerializer
не будет записей в xml-файле для свойств со значениями по умолчанию.
Какой самый простой способ сказать XmlSerializer все еще сериализовать их?
Мне нужно это поддержатьверсии», поэтому, когда я позже изменяю значение по умолчанию в коде, свойство serialized получает значение, с которым оно сериализовано, а не "самый последний" один. Я могу думать о следующем:
Переопределить поведениеPropertyGrid
(используйте пользовательский атрибут, поэтому он будет игнорироватьсяXmlSerializer
);Сделайте что-то вроде пользовательской xml-сериализации, где игнорируйте 'DefaultValue
s;Сделайте что-нибудь с объектом, прежде чем передать егоXmlSeriazer
так что победилт содержатDefaultValue
большеНо есть шанс, что мне не хватает какой-то секретной собственности, что позволяет делать это без особой боли = D.
Вот пример того, что я хочу:
private bool _allowNegative = false;
///
/// Get or set if negative results are allowed
///
[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
будутНЕ положить свойства со значением по умолчанию в XML-файл, и этоПЛОХОЙ (и я пытаюсь это исправить).
Если я раскомментирую (* 2) и (* 3), тогдаполностью такой же, как и комментарий (* 1).
Если я раскомментирую (* 2) и (* 4), тоXmlSerializer
всегда помещает свойства в xml-файл, но это происходит потому, что онибольше не имеют значения по умолчанию а такжеPropertyGrid
показывает все значения жирным шрифтом