当我写这样的代码时
[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]
?
答案 0 :(得分:67)
简单使用:
[XmlIgnore]
[ScriptIgnore]
public List<string> paramFiles { get; set; }
希望它有所帮助。
答案 1 :(得分:45)
嗯......第一个错误说你做不到...... 来自http://msdn.microsoft.com/en-us/library/system.nonserializedattribute.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;
答案 2 :(得分:4)
在C#7.3中,您可以将属性附加到自动实现属性的后备字段。
因此,如果您将项目的语言更新为C#7.3,则以下方法应该起作用:
[field: NonSerialized]
public List<string> paramFiles { get; set; }
答案 3 :(得分:2)
对于那些使用JSON而不是XML的用户,可以在属性上使用[JsonIgnore]
属性:
[JsonIgnore]
public List<string> paramFiles { get; set; }
答案 4 :(得分:1)
从.NET 3.0开始,您可以使用DataContract而不是Serializable。但是,通过DataContract,您将需要通过使用DataMember属性标记可序列化字段来“选择加入”;或使用IgnoreDataMember“退出”。
选择加入与选择退出之间的主要区别在于,默认情况下,选择退出只会序列化公共成员,而选择加入只会序列化标记的成员(与保护级别无关)。