属性上的非序列化

当我编写这样的代码时

[XmlIgnore]
[NonSerialized]
public List<string> paramFiles { get; set; }

我得到以下错误:

Attribute 'NonSerialized' is not valid on this declaration type.
It is only valid on 'field' declarations.


如果我写

[field: NonSerialized]

我收到如下警告

'field' is not a valid attribute location for this declaration.
Valid attribute locations for this declaration are 'property'.
All attributes in this block will be ignored.


如果我写

[property: NonSerialized]

我(再次)得到以下错误:

Attribute 'NonSerialized' is not valid on this declaration type.
It is only valid on 'field' declarations.


如何在属性上使用 [NonSerialized]

106807 次浏览

第一个错误说你不能这么做。 译自: 美国《 http://msdn.microsoft.com/en-us/library/system.nonserializedattribute.aspx 》杂志网站(http://msdn.microsoft.com/en-us/library/system.nonseralizedAttribute.aspx)

 [AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class NonSerializedAttribute : Attribute

我建议使用后场

 public List<string> paramFiles { get { return list;}  set { list = value; } }
[NonSerialized]
private List<string> list;

简单使用:

[XmlIgnore]
[ScriptIgnore]
public List<string> paramFiles { get; set; }

希望能有所帮助。

从现在开始。NET 3.0,您可以使用 数据合同而不是 Serializer。但是,使用 DataContract2时,您需要通过使用 资料会员属性标记可序列化字段来“ opt-in”; 或者使用 忽略数据成员来“ opt-out”。

Opt-in 与 opt-out 之间的主要区别是,在默认情况下,opt-out 仅序列化公共成员,而 opt-in 仅序列化标记的成员(与保护级别无关)。

从 C # 7.3开始,您可以将属性附加到自动实现属性的后台字段。

因此,如果你将你的项目语言升级到 C # 7.3,下面的方法应该可以奏效:

[field: NonSerialized]
public List<string> paramFiles { get; set; }

对于那些使用 JSON 而不是 XML 的用户,可以在属性上使用 [JsonIgnore]属性:

[JsonIgnore]
public List<string> paramFiles { get; set; }

牛顿软件,杰森System.Text. Json (. NET Core 3.0)两种版本。