回答
我認爲有三個選項的位置:
使用XmlIgnore屬性。缺點是您需要事先知道您希望xmlserializer忽略哪些屬性。
執行IXmlSerializable接口。這使您可以完全控制XML的輸出,但您需要自己實現讀取/寫入方法。
執行ICustomTypeDescriptor接口。我相信這會使您的解決方案無論您選擇什麼類型的序列化都能正常工作,但它可能是所有最長的解決方案。
如果您使用XML序列化,請使用[XmlIgnore]
屬性。否則,如何忽略一個特定的屬性是由序列化器本身定義的。
如果要在序列化期間包含字段,但在反序列化期間忽略它,則可以使用OnDeserializedAttribute來運行將爲ID字段設置默認值的方法。
這取決於序列類型。對於BinaryFormatter的這樣這裏完整的例子:
您可以使用OnDeserializedAttribute:
[Serializable]
class SerializableEntity
{
[OnDeserialized]
private void OnDeserialized()
{
id = RetrieveId();
}
private int RetrievId() {}
[NonSerialized]
private int id;
}
還有另一種方式來做到這一點使用IDeserializationCallback:你可以閱讀偉大傑弗裏裏希特的
[Serializable]
class SerializableEntity: IDeserializationCallback
{
void IDeserializationCallback.OnDeserialization(Object sender)
{
id = RetrieveId();
}
private int RetrievId() {}
[NonSerialized]
private int id;
}
第一個給我麻煩,但第二個完美。 – Stoopkid 2014-08-22 04:45:44
一箇舊帖子,但我發現ShouldSerialize模式 http://msdn.microsoft.com/en-us/library/53b8022e%28VS.71%29.aspx這真的很有幫助!
可能是最簡單和有用的解決方案,在運行時對序列化或不屬性進行絕對控制!我曾經在Windows窗體中開發用戶控件時使用它。 – xisket 2017-07-18 07:35:19
NonSerializedAttribute屬性。
http://msdn.microsoft.com/en-us/library/system.nonserializedattribute.aspx
- 1. 以編程方式設置WPF屬性
- 2. Magento:以編程方式從屬性集中刪除屬性
- 3. 如何在以編程方式添加屬性時設置排序順序
- 4. 如何在Android中以編程方式設置樣式屬性?
- 5. 以編程方式設置mule中的調用屬性
- 6. 以編程方式在log4j屬性文件中設置值?
- 7. 如何以編程方式在Magento中設置產品屬性?
- 8. 以編程方式在PowerPoint中設置文字陰影屬性
- 9. 以編程方式在Silverlight中設置TranslateX或Canvas.SetLeft屬性
- 10. 以編程方式刪除Web.config設置
- 11. 以編程方式設置bean的屬性
- 12. 以編程方式設置用戶定義的運行屬性
- 13. 如何以編程方式設置app:srcCompat =「@ drawable/pic」的ImageButton屬性?
- 14. wpf以編程方式設置排序,以便將頁眉切換爲排序
- 15. 以編程方式設置彈簧集成路由器屬性
- 16. 如何以編程方式設置屬性「Retina Display Off」?
- 17. 如何設置(文本)以編程方式查看屬性?
- 18. 如何以編程方式設置依賴屬性值?
- 19. JQuery Mobile - 以編程方式設置屬性
- 20. 以編程方式設置DataGrid行高度屬性
- 21. Android如何以編程方式設置app:tabBackground屬性?
- 22. 如何以編程方式設置屬性?
- 23. 以編程方式設置屬性WPF頁面
- 24. 以編程方式創建LoginButton並設置View屬性
- 25. 如何以編程方式設置打印機屬性?
- 26. 以編程方式將環境屬性設置爲ChromeDriver
- 27. 以編程方式設置iPhone設置
- 28. 以編程方式從NIB設置視圖屬性(不在初始化過程中)
- 29. 我可以在iOS中以編程方式設置對象屬性嗎?
- 30. 以編程方式在LinearLayout中並排設置兩個TextView
對於一個更好的答案,建議你明確你的序列化機制 - 例如XML序列化,數據合同序列化等 – Reddog 2010-06-10 18:22:49