2009-11-13 76 views

回答

59

它不支持自動實現的屬性。您必須使用後臺字段並將其設置爲NonSerializedAttribute

public class ClassWithNonSerializedProperty { 

    [NonSerialized] 
    private object _data; // Backing field of Property Data that is not serialized 

    public object Data{ 
    get { return _data; } 
    set { _data = value; } 
    } 
} 
+0

或者你可以使用[字段:非序列化]對房地產直接。 – profou 2017-10-11 07:50:49

4

如果您序列化爲Xml,那麼您可以使用XmlIgnore屬性。

4

我不確定你可以。這MSDN article on SerializableAttribute建議您實現了ISerializable和控制系列化自己:

所有類型的公共和私有字段由SerializableAttribute標記默認序列化,除非該類型實現ISerializable接口來重寫序列化進程。

或者切換遠離該特定字段的自動屬性。

8
// This works for the underlying delegate of the `event` add/remove mechanism. 
[field:NonSerialized] 
public event EventHandler SomethingHappened; 

但它似乎並沒有自動實現的屬性。我認爲這值得一提,因爲知道序列化一個附有事件訂閱者的對象是很有用的。

4

自動實現的屬性不可能。 考慮以下內容:

此行爲是「按設計」。在實現自動屬性時的決定是,它們將在「常見情況」下工作,除此之外,這意味着在生成的字段上沒有屬性。這背後的想法是保持簡單,不要慢慢將它們變爲完整的屬性。 所以,如果你需要使用NonSerialized屬性,完整的屬性就是這樣。

http://social.msdn.microsoft.com/Forums/en-US/vcsharp2008prerelease/thread/2b6eb489-122a-4418-8759-10808252b195

3

使用不序列化支持字段似乎不與.NET 4.0(至少在XML序列化的情況下)正常工作的建議的解決方案。該字段確實不會被序列化,但使用它的公共屬性會進行序列化,從而破壞目的。使用XmlIgnore解決方法有助於Xml序列化。免責聲明 - 我沒有驗證二進制序列化行爲。

6

如果您序列化爲Json並使用Json.NET serializer(我強烈建議,因爲它比市場上的許多其他序列化器提供的要多得多),那麼您可以使用屬性使用[JsonIgnore]

您不需要創建一個字段。

所以,你的代碼是:

public class ClassName 
{ 
    [JsonIgnore] 
    public object IgnoreMe { get; set; } 

    public object DoNotIgnoreMe { get; set; } 
}