首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么XmlSerializer不需要将类型标记为[Serializable]?

为什么XmlSerializer不需要将类型标记为[Serializable]?
EN

Stack Overflow用户
提问于 2008-12-25 01:59:25
回答 3查看 5K关注 0票数 18

在C#中,如果我想用XmlSerializer序列化一个实例,对象的类型不必用[Serializable]属性来标记。但是,对于其他序列化方法,例如DataContractSerializer,需要将类标记为[Serializable][DataContract]

关于序列化需求有什么标准或模式吗?

EN

回答 3

Stack Overflow用户

发布于 2008-12-25 02:03:10

这是因为XmlSerializer只序列化公共字段/属性。其他形式的序列化可以序列化私有数据,这构成了潜在的安全风险,因此您必须使用属性“选择加入”。

票数 20
EN

Stack Overflow用户

发布于 2008-12-26 08:34:22

安全性不是唯一的问题;简单地说,序列化只对某些类有意义。例如,序列化一个“连接”会产生很小的误差。当然是一个连接字符串,但是连接本身呢?不用了。同样,任何需要非托管指针/句柄的东西都不能很好地序列化。代表也不是。

此外,XmlSerializerDataContractSerializer (默认情况下)是树序列化程序,而不是图形序列化程序-因此任何递归链接(如Parent)都会导致它中断。

用序列化程序的首选令牌标记类只是说“它应该有意义”的一种方式。

IIRC、[XmlSerializer[DataContractSerializer] 都曾使用对诸如[Serializable][DataContract][IXmlSerializable]等苛刻的东西非常苛刻,但他们最近变得更加自由了。

票数 8
EN

Stack Overflow用户

发布于 2008-12-25 15:21:22

目前,在.Net框架中有3种形式的序列化。

  1. XmlSerialization -默认情况下适用于公共字段和属性。仍然可以通过
  2. BinarySerialization控制XmlElementAttribute、XmlAttributeAttribute等-由SerializationAttribute控制。深度集成到CLR
  3. WCF序列化- DataContractAttribute等...

不幸的是,序列化有一个标准的整体模式。这3个框架都有不同的需求和怪癖。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/392431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档