在C#中,如果我想序列化一个实例XmlSerializer
,那么对象的类型不必用[Serializable]
属性标记.但是,对于其他序列化方法,例如DataContractSerializer
,需要将类标记为[Serializable]
或[DataContract]
.
是否有关于序列化要求的标准或模式?
这是因为XmlSerializer仅序列化公共字段/属性.其他形式的序列化可以序列化私有数据,这构成了潜在的安全风险,因此您必须使用属性"选择加入".
安全不是唯一的问题; 简单地说,序列化只对某些类有意义.例如,它使串行化"连接"变得很小.一个连接字符串,当然,但连接本身?罗.同样,任何需要非托管指针/句柄的东西都不会很好地序列化.代表也不是.
此外,XmlSerializer
和DataContractSerializer
(默认)是树序列化,而不是图形序列化-因此,任何递归链接(如Parent
)将导致其破裂.
使用序列化程序的首选标记标记类只是一种说法"它应该有意义".
IIRC,既[XmlSerializer
和[DataContractSerializer]
使用是非常约苛刻之类的刚性[Serializable]
,[DataContract]
或者[IXmlSerializable]
,但他们已经变得有点更自由的最近.