2010-02-04 2 views
14

Stiamo serializzando/deserializzando una classe da XML ma ci sono proprietà e campi nella classe che vogliamo escludere.Differenza tra NonSerialized e Xml.Serialization.XmlIgnore?

Il System.NonSerialized e System.Xml.Serialization.XmlIgnore attributi sembrano fare il lavoro, ma qual è la differenza tra loro? Sembra che possiamo utilizzare XmlIgnore su proprietà o campi della classe. Ma NonSerialized può essere utilizzato solo nei campi. C'è qualche ragione per non usare XmlIgnore in ogni caso, e in tal caso qual è lo scopo dell'attributo NonSerialized e perché la differenza nell'uso?


Ciò è consentito:

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

Ciò è consentito:

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

Ciò è consentito:

<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 

Ma questo non è consentito:

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

risposta

15

NonSerialized vale per più tipi di serializzazione di XML. Si userà NonSerialized se si esegue la serializzazione su binario o SOAP e XmlIgnore se si esegue la serializzazione rigorosa su XML utilizzando un XmlSerializer. Vedere la sezione commenti della classe NonSerializedAttribute su MSDN.