当一个对象被序列化(通过远程处理发送到线上)时,实例方法代码是否被序列化?或者只是将类级别的实例字段序列化?c#序列化中的方法代码
我在问这个,因为我的一些对象有很大的方法,想知道我应该使用DTO(数据传输对象)通过线路发送数据。
我猜这只是数据加上一些类型的版本数据......我是对的吗?
谢谢
当一个对象被序列化(通过远程处理发送到线上)时,实例方法代码是否被序列化?或者只是将类级别的实例字段序列化?c#序列化中的方法代码
我在问这个,因为我的一些对象有很大的方法,想知道我应该使用DTO(数据传输对象)通过线路发送数据。
我猜这只是数据加上一些类型的版本数据......我是对的吗?
谢谢
方法永远不会被序列化。
Re“字段” - 这一切都取决于序列化程序; BinaryFormatter
会做田野;你提到的“远程”,这表明BinaryFormatter
,但远程现在主要是宿醉 - 从MSDN(上远程):
本主题是特定于保留 向后兼容现有的 遗留 技术应用程序,不建议 进行新的开发。现在应该使用Windows Communication Foundation(WCF)开发应用程序 。
如果您使用网络服务或WCF:XmlSerializer
做公共字段+属性; DataContractSerializer
会做标记的字段等
常规类通常可重用为DTO,但如果您需要对线路进行大量控制(或存在版本问题),则单独的DTO可能会有所帮助。
(编辑/附加)注意还存在其他原因不喜欢BinaryFormatter
- 它可以是非常脆用的版本,而且非常痛苦的修复(尽管实现的)。其他(更宽容)序列化程序存在,如果这可能是一个问题...如果是这样,让我知道,我会更新。
我只想提到XmlSerializer和DataContractSerializer无法序列化循环引用。 NetDataContractSerializer可以:http://coding-time.blogspot.com/2008/03/serialize-object-graph-to-xml-in-net.html – 2009-06-15 10:23:44
保存的是数据加上与您的类和属性名称相对应的标签。代码本身不会被序列化。
(回复评论) – 2009-06-15 11:05:18