- 爲您克隆在內存中,通常不
- 無關緊要的小模型;當使用
[Serializable]
時,您通常會使用BinaryFormatter
- 它會自己查看對象;這不要緊,他們實現了什麼接口 - 不使用
- 是,出於同樣的原因接口 - 但模型中的所有類型必須
[Serializable]
- 是,出於同樣的原因;注意:默認
BinaryFormatter
實現望着領域 - 它甚至不會觸及性
就個人而言,我設法勸對BinaryFormatter
,但這也許不是不合理使用。然而!注意容易將多餘的物體意外吸入模型中,通常必須通過event
s。需要注意的是,以紀念所有event
S作爲非序列化是一個好主意:
[field:NonSerialized]
public event EventHandler Something;
(或直接,如果使用顯式add
/remove
存取應用到該字段)
還要注意,就像任何成員:
public object Tag {get;set;} // caller-defined
也應該是[field:NonSerialized]
。
就我個人而言,我會寧願不同的序列化程序,但:這往往會起作用。但我會這樣說:儘量避免持續的輸出BinaryFormatter
,因爲很難保證代碼版本之間的兼容性。
我不知道屬性如何工作
它除添加IL標誌,上面寫着所有什麼「的方式,認爲這是確定要進行序列化」;實際上,大多數串行器甚至不看這個標誌 - 但是BinaryFormatter
是做的那幾個看看這個標誌。這裏的真實代碼是BinaryFormatter
,基本上這樣做:
- 我以前見過這個對象嗎?如果是這樣,只存儲密鑰
- 它是什麼類型?是
[Serializable]
?存儲類型信息
- 發明一個新的參考和存儲,作爲身份
- 它有一個自定義序列化程序嗎?如果是這樣的話:使用
- 它有什麼字段?依次訪問並存儲名稱/值對
完美!非常感謝 :-) – Sebi