1

Why don't use serialization attribute With XMLSerializer in c#.

http://msdn.microsoft.com/en-us/library/71s92ee1.aspx

Here OrderedItem class is not serialized. What is the reason?

4

3 回答 3

2

OrderedItem非常序列化......我猜你的意思是“为什么它没有[Serializable]属性?”。如果是这样,答案很简单:序列化程序不需要它。它etc要求的BinaryFormatter,但他们正在做一些不同的事情——他们正在序列化对象的内部状态。但是,如今大多数序列化程序都不会检查这一点。例子:

  • XmlSerializer
  • DataContractSerializer(以及所有变体)
  • JavascriptSerializer
  • JSON.net
  • protobuf-net
  • 还有很多其他的

基本上,它只是没有必要。也许关键的区别在于,BinaryFormatter可能会意外(没有属性)最终通过远程边界发送不适当的数据,这可能会导致大问题。

许多“轻量级”框架甚至都没有[Serializable]定义。

于 2013-02-27T09:00:37.313 回答
0

BinaryFormatter 使用 [Serializable] 属性。但是 XMLSerializer 不需要这个。通过创建序列化程序

   XmlSerializer serializer = 
   new XmlSerializer(typeof(OrderedItem));

他假设 OrderedItem 确实是可序列化的。

于 2013-02-27T08:59:35.570 回答
0

我发现的一个解释是,如果您将您的类标记为[Serializable]并使用例如序列化该对象,BinaryFormatter那么即使该类的实例的私有成员也将被序列化,因此您可以通过它来决定该类是否应该被序列化全部或使用 Xml 或 JS 序列化程序对其进行序列化,并且只获取公共成员。

因此,如果您使用 XmlSerializer 进行序列化,则只会对公共成员进行序列化。

于 2013-02-27T09:00:43.550 回答