2011-06-05 88 views
1

所以我有一個基類,並且有一個屬性設置爲[Serializable]。 在派生類中,我想使該屬性[NonSerialized]。將屬性從基類更改爲[NonSerialized]

這怎麼辦?

+0

如果它是一個非虛擬財產,你可以隱藏屬性基(使用'new'),並在派生類中添加'NonSerialized'屬性。 – 2011-06-05 02:08:11

+0

嗯試過...似乎並沒有爲我工作 – Adam 2011-06-05 02:24:52

+0

它以什麼方式不起作用?另外,您使用哪種類型的Formatter來序列化派生對象? – 2011-06-05 02:46:03

回答

2

這將違反OOP。基類確立了這個屬性是可序列化的事實。必須可以將派生類的任何實例替換爲基類的實例。這意味着派生類的每個實例都必須具有可序列化的屬性。

+0

有什麼方法可以在運行時在基類上更改它? – Adam 2011-06-05 02:26:32

0

您不能替代新屬性,但可以定義一個名爲ShouldSerializePropertyName的屬性(其中PropertyName是您的屬性的名稱),該屬性總是返回false。這應該覆蓋屬性上的屬性的存在。

例如,

public class BaseClass 
{ 
    [Serialized] 
    public string MyProperty { get; set; } 
} 

public class ChildClass : BaseClass 
{ 
    public bool ShouldSerializeMyProperty { get { return false; } } 
} 
+0

你能給我一個這樣的代碼示例片段嗎? – Adam 2011-06-05 03:01:43