Разница между NonSerialized и Xml.Serialization.XmlIgnore?
Мы сериализуем/десериализируем класс из 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
NonSerialized применяется к большему количеству типов сериализации, чем XML. Вы бы использовали NonSerialized, если бы вы сериализовались на двоичные или SOAP и XmlIgnore, если вы строго сериализовались в XML с помощью XmlSerializer. См. Раздел замечаний класса NonSerializedAttribute в MSDN.