Jak powiedzieć XmlSerializer, aby serializować właściwości za pomocą [DefautValue (…)] zawsze?
ja używamDefaultValue
atrybut dla właściwegoPropertyGrid
zachowanie (pokazuje wartości inne niż domyślne pogrubione). Teraz, jeśli chcę serializować pokazany obiekt za pomocąXmlSerializer
nie będzie wpisów w pliku xml dla właściwości z wartościami domyślnymi.
Jaki jest najłatwiejszy sposób na przekazanie XmlSerializer ich serializacji?
Potrzebuję tego do obsługi „wersji”, więc kiedy zmieniam wartość domyślną później w kodzie - właściwość serializowana otrzymuje wartość, którą serializowała, a nie „najnowszą”. Mogę myśleć o następujących sprawach:
Zastąp zachowaniePropertyGrid
(użyj atrybutu niestandardowego, aby był ignorowany przezXmlSerializer
);Wykonaj niestandardową serializację xml, gdzie ignorujeszDefaultValue
jest;Zrób coś z obiektem przed przekazaniem goXmlSeriazer
więc nie będzie zawieraćDefaultValue
już jest.Ale jest szansa, że tęsknię za jakąś tajną własnością, która pozwala to zrobić bez większego bólu = D.
Oto przykład tego, czego chcę:
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
Jeśli odkomentuję (* 1), będę miał pożądany efektPropertyGrid
- właściwości z wartościami domyślnymi są wyświetlane w normalnym tekście, w przeciwnym razie tekst jest pogrubiony. jednakXmlSerializer
będzieNIE umieść właściwości z wartością domyślną w pliku xml i tak jestZŁY (i próbuję to naprawić).
Jeśli odkomentuję (* 2) i (* 3), to jest to całkowicie takie samo jak odkomentowanie (* 1).
Jeśli odkomentuję (* 2) i (* 4), toXmlSerializer
zawsze umieszcza właściwości w pliku xml, ale dzieje się tak, ponieważ onenie mają już wartości domyślnej iPropertyGrid
pokazuje wszystkie wartości pogrubioną czcionką.