c# - XmlSerializer 和 BinaryFormatter 之间有什么区别

标签 c# .net serialization xml-serialization binary-serialization

上周我花了很多时间进行连载。在那段时间里,我发现了许多使用 BinaryFormatter 或 XmlSerializer 的示例。不幸的是,我没有找到任何示例来全面详细说明两者之间的区别。

我的好奇心在于为什么 BinaryFormatter 能够直接反序列化为接口(interface),而 XmlSerializer 却不能。 Jon Skeet在对“casting to multiple (unknown types) at runtime”的回答中提供了一个接口(interface)的直接二进制序列化示例。 Stan R.在他对“XML Object Deserialization to Interface”的回答中为我提供了使用 XmlSerializer 实现我的目标的方法。

除了明显的 BinaryFormatter 使用二进制序列化而 XmlSerializer 使用 XML 之外,我还想更全面地了解它们之间的根本区别。何时使用其中一个或另一个以及各自的优缺点。

最佳答案

二进制格式化程序能够直接反序列化为接口(interface)类型的原因是,当一个对象最初被序列化为二进制流时,包含类型和程序集信息的元数据被嵌入到对象数据中。这意味着当二进制格式化程序反序列化它知道其类型的对象时,构建正确的对象,然后您可以将其转换为该对象实现的接口(interface)类型。

另一方面,XML 序列化器只是序列化为一个模式,并且只序列化对象的公共(public)字段和值,除此之外没有类型信息(例如,类型实现的接口(interface))。

这是一篇好文章,.NET Serialization , 比较 BinaryFormatter , SoapFormatter , 和 XmlSerializer .我建议您查看下表,其中除了前面提到的序列化程序外还包括 DataContractSerializer。 , NetDataContractSerializerprotobuf-net .

Serialization Comparison

关于c# - XmlSerializer 和 BinaryFormatter 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1154198/

相关文章:

.net - .NET中的序列化和混淆

Java - .Net 对象交换,不基于 Web

c# - C# Listview 中的选中项

c# - 在 Controller ApiController 上未找到任何操作

c# - 观察窗口与代码

c# - 使用本地类作为抽象类的返回类型

.net - 如何实例化已注入(inject)依赖项的类的对象?

c# - String.IndexOf 的 IList<T> 版本(找到一个子 -'string' ,而不仅仅是单个对象)

c++ - boost 序列化的编译错误

c# - 在 Windows XP 下通过远程桌面渲染 WPF 有问题吗?