Предотвратить сериализацию собственности - PullRequest
12 голосов
/ 06 декабря 2011

Я пробовал что-то вроде этого:

    [NonSerialized]
    private string _DecodeText;
    public string DecodeText { get { return _DecodeText; } set { _DecodeText = value; } }

Но это не работает. "DecodeText" все еще находится в сериализованном файле. Как я могу предотвратить сериализацию свойства?

Ответы [ 3 ]

24 голосов
/ 06 декабря 2011

Подозреваю, вы используете XmlSerializer? Если это так, используйте атрибут [XmlIgnore].

Это должно быть применено к свойству вместо поля поддержки, так как XmlSerializer сериализует открытые поля и свойства (тогда как BinaryFormatter использует refelction для доступа к закрытым полям - следовательно, при использовании BinaryFormatter).

4 голосов
/ 10 декабря 2012

Я смог использовать следующее и не сериализовал свойство (.NET 4.0):

private string _DecodeText;
[System.Xml.Serialization.XmlIgnore]
public string DecodeText { get { return _DecodeText; } set { _DecodeText = value; } }
3 голосов
/ 06 декабря 2011

Обновленный ответ

Атрибут [NonSerialized] находится в переменной, а не в свойстве, но не может быть в атрибуте. Так что это не поможет.

Одним из способов предотвращения сериализации свойства является добавление метода

public bool ShouldSerializeDecodeText() {
   return false;
}

и это (по крайней мере для XmlSerializer) предотвратит сериализацию свойства.

Если вы не хотите добавлять много методов в класс только для сериализации, вы можете попробовать наследовать его и добавить методы в производный класс.

НТН, Алан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...