为什么不在c#中对XMLSerializer使用序列化属性。
http://msdn.microsoft.com/en-us/library/71s92ee1.aspx
这里OrderedItem类没有序列化。原因何在?
发布于 2013-02-27 17:00:37
OrderedItem是非常序列化的……我猜你的意思是“为什么它没有[Serializable]属性?”如果是这样,答案很简单:序列化程序不需要它。这是BinaryFormatter等人需要的,但他们做的事情有点不同--他们序列化了对象的内部状态。然而,现在的大多数序列化程序都不检查这一点;例如:
XmlSerializerDataContractSerializer (以及所有的variants)JavascriptSerializer基本上,这是没有必要的。也许关键的区别在于,BinaryFormatter可能会意外地(没有该属性)通过远程处理边界发送不适当的数据,这可能会导致大问题。
许多“轻量级”框架甚至都没有定义[Serializable]。
发布于 2013-02-27 16:59:36
BinaryFormatter使用Serializable属性。然而,XMLSerializer并不需要这个。通过创建seralizer
XmlSerializer serializer =
new XmlSerializer(typeof(OrderedItem));他假设OrderedItem确实是可序列化的。
发布于 2013-02-27 17:00:44
我发现的一种解释是,如果您将您的类标记为[Serializable],并使用BinaryFormatter序列化该对象,那么即使是该类实例的私有成员也将被序列化,因此您可以通过这种机制来决定是将该类整体序列化,还是使用Xml或JS序列化器序列化它并仅获取公共成员。
因此,如果使用XmlSerializer进行序列化,则只会序列化公共成员。
https://stackoverflow.com/questions/15107774
复制相似问题