回答
我認爲有三個選項的位置:
使用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. 如何以編程方式在Java中設置屬性屬性?
- 3. Magento:以編程方式從屬性集中刪除屬性
- 4. 如何在以編程方式添加屬性時設置排序順序
- 5. 如何以編程方式設置註釋屬性/屬性?
- 6. 如何在Android中以編程方式設置樣式屬性?
- 7. jqGrid:以編程方式設置可排序列
- 8. 以編程方式設置mule中的調用屬性
- 9. 以編程方式在Silverlight中設置TranslateX或Canvas.SetLeft屬性
- 10. 如何在WPF中以編程方式設置clr-namespace屬性
- 11. 以編程方式在PowerPoint中設置文字陰影屬性
- 12. 如何以編程方式在Magento中設置產品屬性?
- 13. 以編程方式在log4j屬性文件中設置值?
- 14. 以編程方式在目標c中設置屬性值
- 15. 以編程方式刪除Web.config設置
- 16. 以編程方式在jqGrid列中設置editoptions選項的'只讀'屬性
- 17. 以編程方式設置用戶定義的運行屬性
- 18. 如何以編程方式設置app:srcCompat =「@ drawable/pic」的ImageButton屬性?
- 19. 如何以編程方式設置android:angle屬性的GradientDrawable?
- 20. 以編程方式設置bean的屬性
- 21. 如何以編程方式設置HeaderredContentControl的HeaderTemplate屬性
- 22. wpf以編程方式設置排序,以便將頁眉切換爲排序
- 23. 不要以編程方式檢入TFS中排除的文件
- 24. 以任何方式以編程方式設置BizTalk消息上下文屬性?
- 25. 修改drools規則以編程方式設置規則屬性
- 26. 如何以編程方式設置屬性「Retina Display Off」?
- 27. MonoDroid:如何以編程方式設置TableRow背景屬性?
- 28. 如何以編程方式設置textview-s及其屬性?
- 29. 以編程方式設置彈簧集成路由器屬性
- 30. 如何以編程方式設置打印機屬性?
對於一個更好的答案,建議你明確你的序列化機制 - 例如XML序列化,數據合同序列化等 – Reddog 2010-06-10 18:22:49