我需要将对象序列化为易于传输的形式。然后将发生跨对象边界的传输,其中对象必须是字符串。在跨应用程序边界传输之后,我将反序列化该对象,然后使用它进行一些工作。
我的对象将有许多简单的公共属性和一个集合。
由于沙盒环境,我需要在.Net框架的范围内工作,即不使用Json.Net或其他第三方库。
似乎.Net为这类工作提供了许多选择,我试图了解我应该使用哪些。
二进制序列化(BinaryFormatter
& SoapFormatter
)
这些似乎非常简单,我所要做的就是将我的类标记为[Seralizable]
并使用适当的类来创建流。然后我需要将流转换为string
,这似乎是直截了当的。 SoapFormatter
可以创建一些合理的人类可读数据。
XML序列化(XmlSerializer
)
为此,我不需要装饰我的类,但是我应该考虑使用Sgen.exe来提高性能(这听起来很痛苦)。它比二进制序列化有额外的好处,因为数据是人类可读的。
数据合约序列化程序(DataContractSerializer
& DataContractJsonSerializer
)
WCF的一部分,为此,我应该装饰我的课程(但我可以在没有它的情况下离开),即[DataContract] and [DataMember]
。额外的装饰是一种痛苦,但我最终得到了一些人类可读的数据。我也可以选择Json格式的数据,但它们基本上是相同的过程。
所以就他们之间的选择而言:
DataContractSerializer
超过XmlSerializer
(除了在某些情况下)。虽然我必须装饰我的类,但这样就无需使用Sgen.exe。DataContractSerializer
和BinaryFormatter
之间挑选。目前我为了简单起见转向二进制序列化,但还有什么我应该考虑的吗?