- 对于您在内存中克隆的小型模型,通常不会
- 无关紧要的;使用时,
[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]
吗?存储类型信息
- 发明一个新的参考并将其存储为身份
- 它有自定义序列化程序吗?如果是这样:使用它
- 它有哪些领域?依次访问每个并存储名称/值对