Разница между NonSerialized и Xml.Serialization.XmlIgnore? - PullRequest
16 голосов
/ 04 февраля 2010

Мы сериализуем / десериализуем класс из XML, но в классе есть свойства и поля, которые мы хотим исключить.

Атрибуты System.NonSerialized и System.Xml.Serialization.XmlIgnore , похоже, работают, но в чем разница между ними? Кажется, мы можем использовать XmlIgnore для любых свойств или полей класса. Но NonSerialized можно использовать только для полей. Есть ли причина не использовать XmlIgnore в каждом случае, и если да, то какова цель атрибута NonSerialized и почему существует разница в использовании?


Это разрешено:

<System.NonSerialized()> _
Public Foo As String

Это разрешено:

<System.Xml.Serialization.XmlIgnore()> _
Public Foo As String

Это разрешено:

<System.Xml.Serialization.XmlIgnore()> _
Public Property Bar() As String
    Get
        Return _Bar
    End Get
    Set(ByVal value As String)
        _Bar = value
    End Set
End Property

Но это не разрешено:

<System.NonSerialized()> _
Public Property Bar() As String
    Get
        Return _Bar
    End Get
    Set(ByVal value As String)
        _Bar = value
    End Set
End Property

1 Ответ

18 голосов
/ 05 февраля 2010

NonSerialized применяется к большему количеству типов сериализации, чем XML. Вы бы использовали NonSerialized, если вы сериализовали в двоичный или SOAP, и XmlIgnore, если вы строго сериализовали в XML с использованием XmlSerializer. См. Раздел примечаний класса NonSerializedAttribute в MSDN.

...