在C#中,如果我想用XmlSerializer序列化一个实例,对象的类型不必用[Serializable]属性来标记。但是,对于其他序列化方法,例如DataContractSerializer,需要将类标记为[Serializable]或[DataContract]。
关于序列化需求有什么标准或模式吗?
发布于 2008-12-25 02:03:10
这是因为XmlSerializer只序列化公共字段/属性。其他形式的序列化可以序列化私有数据,这构成了潜在的安全风险,因此您必须使用属性“选择加入”。
发布于 2008-12-26 08:34:22
安全性不是唯一的问题;简单地说,序列化只对某些类有意义。例如,序列化一个“连接”会产生很小的误差。当然是一个连接字符串,但是连接本身呢?不用了。同样,任何需要非托管指针/句柄的东西都不能很好地序列化。代表也不是。
此外,XmlSerializer和DataContractSerializer (默认情况下)是树序列化程序,而不是图形序列化程序-因此任何递归链接(如Parent)都会导致它中断。
用序列化程序的首选令牌标记类只是说“它应该有意义”的一种方式。
IIRC、[XmlSerializer和[DataContractSerializer] 都曾使用对诸如[Serializable]、[DataContract]或[IXmlSerializable]等苛刻的东西非常苛刻,但他们最近变得更加自由了。
发布于 2008-12-25 15:21:22
目前,在.Net框架中有3种形式的序列化。
不幸的是,序列化有一个标准的整体模式。这3个框架都有不同的需求和怪癖。
https://stackoverflow.com/questions/392431
复制相似问题