2011-03-29 65 views
6

我想序列化一個嵌套類的對象。我已標記的與[非序列化]屬性的嵌套類,但是我收到一個錯誤:非序列化屬性創建錯誤

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

如何省略嵌套類從序列化?

我已經包含了一些代碼,可以顯示我正在嘗試做什麼。 感謝您的幫助。

[Serializable] 
public class A_Class 
{ 
    public String text { get; set; } 

    public int number { get; set; } 
} 

[Serializable] 
public class B_Class 
{ 
    [NonSerialized] 
    public A_Class A { get; set; } 

    public int ID { get; set; } 
} 

public byte[] ObjectToByteArray(object _Object) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     var formatter = new BinaryFormatter(); 
     formatter.Serialize(stream, _Object); 
     return stream.ToArray(); 
    } 
} 

void Main() 
{ 
    Class_B obj = new Class_B() 

    byte[] data = ObjectToByteArray(obj); 
} 
+1

錯誤是完全描述了這個問題 - 你不能將這個屬性應用到除字段以外的任何東西(你試圖將它應用到屬性)。 – Alex 2011-03-29 15:18:27

回答

9

錯誤告訴你,你需要知道的一切:非序列化只能適用於域,但您嘗試將其應用到的屬性,雖然自動屬性。

您唯一真正的選擇是不使用該欄位的自動屬性,如StackOverflow question中所述。

7

儘量明確使用支持字段,你可以馬克爲[非序列化]

[Serializable] 
public class B_Class 
{ 
    [NonSerialized] 
    private A_Class a; // backing field for your property, which can have the NonSerialized attribute. 
    public int ID { get; set; } 

    public A_Class A // property, which now doesn't need the NonSerialized attribute. 
    { 
    get { return a;} 
    set { a= value; } 
    } 
} 

的問題是,NonSerialized屬性是有效的領域,但沒有屬性,因此,你不能用它與自動實現的屬性相結合。