我正在读一本关于序列化和反序列化文件或通过Web服务发送数据的书。我的问题是..在使用Web服务时是否必须使用序列化。此外,当使用序列化在本地保存文件时,这样做的重要性是什么?
我知道它将数据保存到二进制数据中。这是压缩数据吗?
我感谢您的回复。谢谢!
答案 0 :(得分:0)
二进制数据比SOAP序列化更紧凑,但SOAP序列化针对Web使用而非本地存储进行了优化。关于Web服务,大多数Web服务都希望它们的数据以非常特定的格式到达,但通常.NET和Visual Studio可以为您处理。如果您手动尝试为Web服务创建SOAP,那么您可能做错了什么。您应该能够添加对Web服务的引用,并让Visual Studio生成一个可以使用的良好对象模型,从而抽象出所有SOAP和序列化问题。
答案 1 :(得分:0)
使用Web服务时是否必须使用序列化。
是的,确实如此。网络传输字节而不是对象,因此您的对象必须转换为字节(无论是原始二进制形式,XML,SOAP,JSON还是其他任何东西)。保存到磁盘上的文件也是如此:磁盘可以包含字节,而不是对象......
答案 2 :(得分:0)
你在这里有几个问题。
首先,在使用Web服务时是否必须使用序列化:我会说是的。通常序列化(总是?)是指从内存中取出一些对象并将其转换为另一种格式;例如,从内存到磁盘驱动器上的文件。有了这个(糟糕的)定义,Web服务至少在内部会根据请求序列化一些对象(以确定调用哪种方法等)。如果您的网站有任何参数或返回值,那么它们也必须序列化。
其次,序列化为二进制格式通常用于大小和速度。将对象(在.Net中)序列化为二进制对象并且比xml表示小得多通常要快得多。
答案 3 :(得分:0)
是;要在进程外(特别是通过网络)发送数据,您需要将其序列化。这大部分都隐含在.NET中 - 你只是告诉它如何。使用“asmx”它将使用XmlSerializer
,因此不需要(公共.ctor()
除外)。对于WCF,最好使用显式[DataContract]
等。请注意,在这两种情况下,它都使用基于xml的变体; “二进制”的描述很简单:一切是计算机中的二进制(或更糟:电子,字段或其他东西)。文本表达只是在我们的想象中;-p
如果您使用“远程处理”,那么它默认使用BinaryFormatter
, (正如它所暗示的那样)是一个真正的二进制格式化程序,但它有一些自己的小问题。
我会在使用传输(通信等)和存储的数据之间做出很大的区分。在第一种情况下,它是短暂的,你可以滥用更多的SOA技术如果你绝对必须(虽然我尽量不这样做) - 例如,BinaryFormatter
和{{ 1}}包含类型元数据,松散可接受,但如果你将它存储在短期以外的任何东西可能会很痛苦。存储后,您需要非常小心,以便重新创建它,并且元数据/基于字段的存储为very brittle。
对于存储,我坚持使用基于合同的数据:
NetDataContractSerializer
或XmlSerializer
)(在底部的情况下,二进制意味着:根本不是基于文本的)