2011-10-07 57 views
39

當我寫這樣的代碼非序列化物業

[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

可能的重複[如何將屬性標記爲不可序列化的json?](http://stackoverflow.com/questions/5103200/how-to-mark-a-property-as-non-serializable-for- json) –

回答

42

好...第一個錯誤告訴你不能.. 從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; 
+9

使用建議的後臺字段似乎不起作用。該物業仍在序列化。 –

+0

是的,但它並不適用於每個名爲AaaSerializer的類。你在使用哪個序列化程序? – wiero

+2

正確的屬性是[NonSerialized],而不是[NonSerializable] –

52

簡單的使用:

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

希望它有幫助。

+2

事實上,這甚至可以在傳統的ASP.NET Web服務場景中完全隱藏來自消費者的屬性名稱(對於那些陷入WCF項目之前的人來說這是一個很棒的技巧) – timmi4sa

+0

非常感謝你,這是完美的 – Mik1893

+0

我不需要使用[ScriptIgnore]使這項工作 –