.net - NonSerialized 和 Xml.Serialization.XmlIgnore 之间的区别?

标签 .net xml-serialization attributes

我们正在从 XML 序列化/反序列化一个类,但该类中有我们想要排除的属性和字段。

System.NonSerializedSystem.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

最佳答案

NonSerialized 比 XML 适用于更多类型的序列化。如果要序列化为二进制或 SOAP,则应使用 NonSerialized;如果要使用 XmlSerializer 严格序列化为 XML,则应使用 XmlIgnore。参见NonSerializedAttribute的备注部分MSDN 类(class)。

关于.net - NonSerialized 和 Xml.Serialization.XmlIgnore 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2201658/

相关文章:

c# - 以编程方式向验证器添加属性

c# .net 更改标签文本

mysql 日期时间格式化为字符串 HH :MM

c# - 编写条件语句的替代方法

.net - 为什么不能在 C# 中对字典对象进行 XmlSerialized?

java - Jackson 根据字段值添加包装器

enums - 如何在枚举中保留值类型

.NET Windows 服务、线程和垃圾收集(可能存在内存泄漏)

serialization - XStream <-> 替代二进制格式(例如 Protocol Buffer )

c# - 强类型、可本地化的 DisplayNameAttribute