2010-02-04 18 views
14

Estamos serializando/deserializando una clase de XML pero hay propiedades y campos en la clase que deseamos excluir.Diferencia entre NonSerialized y Xml.Serialization.XmlIgnore?

El System.NonSerialized y System.Xml.Serialization.XmlIgnore atributos parecen hacer el trabajo, pero ¿cuál es la diferencia entre ellos? Parece que podemos usar XmlIgnore en cualquiera de las propiedades o campos de la clase. Pero NonSerialized solo se puede usar en los campos. ¿Hay alguna razón para no usar XmlIgnore en todos los casos y, de ser así, cuál es el propósito del atributo NonSerialized y por qué la diferencia en el uso?


Esto está permitido:

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

Esto está permitido:

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

Esto está permitido:

<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 

Pero esto no está permitido:

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

Respuesta

15

NonSerialized se aplica a más tipos de serialización de XML. Utilizaría NonSerialized si estuviese serializando en binario o SOAP, y XmlIgnore si estuviese serializando estrictamente en XML utilizando un XmlSerializer. Consulte la sección de observaciones de la clase NonSerializedAttribute en MSDN.