2009-06-15 47 views
3

当一个对象被序列化(通过远程处理发送到线上)时,实例方法代码是否被序列化?或者只是将类级别的实例字段序列化?c#序列化中的方法代码

我在问这个,因为我的一些对象有很大的方法,想知道我应该使用DTO(数据传输对象)通过线路发送数据。

我猜这只是数据加上一些类型的版本数据......我是对的吗?

谢谢

+0

(回复评论) – 2009-06-15 11:05:18

回答

2

方法永远不会被序列化。

Re“字段” - 这一切都取决于序列化程序; BinaryFormatter会做田野;你提到的“远程”,这表明BinaryFormatter,但远程现在主要是宿醉 - 从MSDN(上远程):

本主题是特定于保留 向后兼容现有的 遗留 技术应用程序,不建议 进行新的开发。现在应该使用Windows Communication Foundation(WCF)开发应用程序 。

如果您使用网络服务或WCF:XmlSerializer做公共字段+属性; DataContractSerializer会做标记的字段等

常规类通常可重用为DTO,但如果您需要对线路进行大量控制(或存在版本问题),则单独的DTO可能会有所帮助。


(编辑/附加)注意还存在其他原因不喜欢BinaryFormatter - 它可以是非常用的版本,而且非常痛苦的修复(尽管实现的)。其他(更宽容)序列化程序存在,如果这可能是一个问题...如果是这样,让我知道,我会更新。

+0

我只想提到XmlSerializer和DataContractSerializer无法序列化循环引用。 NetDataContractSerializer可以:http://coding-time.blogspot.com/2008/03/serialize-object-graph-to-xml-in-net.html – 2009-06-15 10:23:44

0

保存的是数据加上与您的类和属性名称相对应的标签。代码本身不会被序列化。