2010-02-04 37 views
14

Chúng tôi đang sắp xếp/deserializing một lớp từ XML nhưng có các thuộc tính và các trường trong lớp mà chúng ta muốn loại trừ.Sự khác biệt giữa NonSerialized và Xml.Serialization.XmlIgnore?

Các System.NonSerializedSystem.Xml.Serialization.XmlIgnore thuộc tính dường như thực hiện công việc nhưng sự khác biệt giữa chúng là gì? Có vẻ như chúng tôi có thể sử dụng XmlIgnore trên một trong hai thuộc tính hoặc trường của lớp. Nhưng NonSerialized chỉ có thể được sử dụng trên các trường. Có lý do nào không sử dụng XmlIgnore trong mọi trường hợp, và nếu vậy mục đích của NonSerialized thuộc tính là gì và tại sao sự khác biệt trong cách sử dụng?


này được phép:

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

này được phép:

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

này được phép:

<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 

Nhưng điều này là không được phép:

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

Trả lời

15

NonSerialized áp dụng cho nhiều loại serialization hơn XML. Bạn sẽ sử dụng NonSerialized nếu bạn đang tuần tự hóa thành nhị phân hoặc SOAP và XmlIgnore nếu bạn đang sắp xếp tuần tự hoàn toàn tới XML bằng cách sử dụng XmlSerializer. Xem phần nhận xét của lớp NonSerializedAttribute tại MSDN.

Các vấn đề liên quan