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 ignorujeszDefaultValuejest;Zrób coś z obiektem przed przekazaniem goXmlSeriazer więc nie będzie zawieraćDefaultValuejuż 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ą.

questionAnswers(4)

yourAnswerToTheQuestion