我应该以哪种方式序列化我的对象?

时间:2016-06-28 14:50:24

标签: c# .net serialization deserialization

我需要将对象序列化为易于传输的形式。然后将发生跨对象边界的传输,其中对象必须是字符串。在跨应用程序边界传输之后,我将反序列化该对象,然后使用它进行一些工作。

我的对象将有许多简单的公共属性和一个集合。

由于沙盒环境,我需要在.Net框架的范围内工作,即不使用Json.Net或其他第三方库。

似乎.Net为这类工作提供了许多选择,我试图了解我应该使用哪些。

二进制序列化(BinaryFormatter& SoapFormatter

这些似乎非常简单,我所要做的就是将我的类标记为[Seralizable]并使用适当的类来创建流。然后我需要将流转换为string,这似乎是直截了当的。 SoapFormatter可以创建一些合理的人类可读数据。

XML序列化(XmlSerializer

为此,我不需要装饰我的类,但是我应该考虑使用Sgen.exe来提高性能(这听起来很痛苦)。它比二进制序列化有额外的好处,因为数据是人类可读的。

数据合约序列化程序(DataContractSerializer& DataContractJsonSerializer

WCF的一部分,为此,我应该装饰我的课程(但我可以在没有它的情况下离开),即[DataContract] and [DataMember]。额外的装饰是一种痛苦,但我最终得到了一些人类可读的数据。我也可以选择Json格式的数据,但它们基本上是相同的过程。

所以就他们之间的选择而言:

  • MSDN建议默认排名DataContractSerializer超过XmlSerializer(除了在某些情况下)。虽然我必须装饰我的类,但这样就无需使用Sgen.exe。
  • 我不确定如何在DataContractSerializerBinaryFormatter之间挑选。
  • 在性能方面,他们看起来非常相似,if slower than other non .Net options

目前我为了简单起见转向二进制序列化,但还有什么我应该考虑的吗?

0 个答案:

没有答案