何时应使用XML序列化?

3

我一直在研究XML序列化,据我所知,它是一种将对象状态持久化到文件中的方法。就实现而言,看起来足够简单,似乎有很多资源可以应用它。什么时候应该使用XML序列化?有什么好处?哪些情况最适合使用它?

5个回答

3
.NET的XmlSerializer类并不是将对象持久化为XML的唯一方式。更新的DataContractSerializer更快,而且还允许将对象持久化为一种更紧凑的二进制XML形式。
现在XmlSerializer只会得到有限的错误修复,部分原因是因为太多代码依赖于它的工作细节,另一部分原因是因为它与Microsoft认为是“传统技术”的ASMX Web服务相关联。
但这并不适用于DataContractSerializer,它仍然是WCF中活跃和重要的一部分。

好的...但是什么时候会用到这个呢?了解不同版本的信息很有帮助,感谢让我知道。所以根据你的说法,我应该花时间学习DataContractSerializer? - CaffeineZombie
是的,除非您需要完全控制XML格式,否则请坚持使用DataContractSerializer。它更快,更灵活。例如,它可以序列化私有字段,而XmlSerializer将会忽略它们。 - John Saunders

2

您在帖子中已经回答了部分问题。它非常适用于对象状态的持久化,我在应用程序中使用它来保存用户设置。因为它是标准化的,所以也是将数据发送到其他系统的好方法。需要记住的重要一点是它容易被人类阅读。这可能是好事或坏事,取决于您的情况。如果您不希望其他人能够理解它,则可以考虑加密它,或者使用加密二进制序列化。

编辑:
另一个值得一提的陷阱是.NET实现的XMLSerializer只会序列化对象中的公共成员。如果您需要保留私有或受保护的成员,则需要使用自定义的序列化器或使用其他形式的序列化。


谢谢,这正是我在寻找的。 - CaffeineZombie

1

Web服务对于不同系统之间的通信非常有用。例如,可以通过使用可序列化的XML对象使Java应用程序和C#应用程序通过Web服务进行通信。两个应用程序都理解XML,并且屏蔽了其他语言的细节。虽然您也可以相互传递字符串,但XML提供了强类型和模式验证。


非常有趣。所以它应该用于与其他语言进行通信,并提供了一种很好的验证数据的方式。谢谢! - CaffeineZombie

0

这只是个人经验 - XML序列化对于Web服务非常有用。 此外,如果您想修改(或允许第三方应用程序修改)存储的对象/文件而不使用正在编写的应用程序,XML可能是一个很好的选择。


0
我使用HttpWebRequest发送了一个由我编写的类对象数组,因此我不能将其作为对象发送,因为我正在混合使用HttpWebRequest + Soap(我正在编写),而在Soap中,您不能将非预定义对象发送为String、int等。所以我使用XML序列化将我的对象转换为XML字符串,并通过我的HttpWebRequest发送它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接