Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET framework中,何时应该使用XML序列化与二进制序列化?_C#_.net_Serialization_Xml Serialization_Binary Serialization - Fatal编程技术网

C# 在.NET framework中,何时应该使用XML序列化与二进制序列化?

C# 在.NET framework中,何时应该使用XML序列化与二进制序列化?,c#,.net,serialization,xml-serialization,binary-serialization,C#,.net,Serialization,Xml Serialization,Binary Serialization,我很困惑-什么时候应该在.NET framework中使用XML序列化,什么时候应该使用二进制序列化?特定于.NET,如果有两个应用程序使用相同的类型系统,那么可以使用二进制序列化。另一方面,如果应用程序位于不同的平台,则建议使用XML序列化。因此,如果我正在编写一个聊天应用程序(客户端和服务器),我可能会使用二进制序列化,但如果我后来决定使用Python来编写客户端,那么我可能不会 如果希望用户友好或跨平台输出,请使用XML。 此外,XML序列化使用公共字段和属性进行序列化,如果需要,可以在类

我很困惑-什么时候应该在.NET framework中使用XML序列化,什么时候应该使用二进制序列化?

特定于.NET,如果有两个应用程序使用相同的类型系统,那么可以使用二进制序列化。另一方面,如果应用程序位于不同的平台,则建议使用XML序列化。因此,如果我正在编写一个聊天应用程序(客户端和服务器),我可能会使用二进制序列化,但如果我后来决定使用Python来编写客户端,那么我可能不会

如果希望用户友好或跨平台输出,请使用XML。 此外,XML序列化使用公共字段和属性进行序列化,如果需要,可以在类级别使用属性和自定义序列化来更改/重新格式化输出。
宾塞。使用私有字段进行序列化。

两个现有答案都侧重于“跨平台”,但这是一个无关的问题。他们提出的要点是“如果您正在进行跨平台操作,请不要使用
BinaryFormatter
”——我完全支持这一点。然而,有一系列的二进制序列化格式非常跨平台,protobuf/ASN.1就是主要的例子

那么,让我们看看每一个都能提供什么

  • 二进制文件通常更小,处理速度更快(在两端),并且不容易让人阅读/编辑
  • 文本格式(xml/json)往往比二进制格式更详细(虽然通常压缩得很好),但手工操作非常容易;但是,所有的文本处理映射往往会使它们变慢
    • xml在web服务中非常常见,得益于谷歌的支持,如xsd、xslt和健壮的xml编辑器
    • json是基于浏览器的通信中的主要角色(尽管它也用于web服务),虽然形式不太正式,但仍然非常有效
请注意,只要选择适当的二进制格式,互操作性既不是它们的优点也不是缺点


这将比较大多数.NET序列化程序的序列化时间、反序列化和空间度量,以供参考。

需要二进制时使用二进制序列化?困惑在哪里?只是想要?或者在任何情况下都应该这样做?如果您在说“xml序列化”时包含数据契约序列化程序,那么我同意您的看法。@Mahantesh@Adeel-“binary”不是这里的问题;二进制不是不可互操作的,只是:
BinaryFormatter
(二进制序列化程序的一个特定示例)是一个糟糕的选择。还有其他几种。@Adeel,你更喜欢“than”吗?唉;哦,古老的神话。。。反驳这两点;虽然
BinaryFormatter
确实是一个字段序列化程序,但它不是唯一的二进制序列化程序-大多数其他序列化程序的性能要好得多-同样地,
DataContractSerializer
编写xml,并且除非正确注释类型,否则它将充当字段序列化程序。DataContractSerializer,WCF?在这个问题上,没有一个词是关于这个的。我的参考文献是“xml序列化”,它与
XmlSerializer
不同。“xml序列化”只是一种分类
XmlSerializer
是“xml序列化”API的一个具体示例
DataContractSerializer
还执行“xml序列化”。有点奇怪,您是如何找到旧答案的?就在今天,我试图找到我最近对一些相关问题的一个答案,但我很难找到它。@H.B.通常通过谷歌,