一个非常简单的问题......
将DataMember
属性应用于事件或委托以将其序列化是否正确?
考虑一下我在想什么:
1)嗯,委托是一种基于其他类型的类型,因此只要这些类型本身可序列化,就不需要(不正确)序列化委托。
2)鉴于事件基于委托,并且委托(因为1中所述)不需要直接序列化,我假设事件不需要标记为可序列化。
所以,我的问题是:
将序列化属性应用于事件和转发是否正确?
如果答案是“不!不需要将它们序列化”,1)和2)是否正确?
另一个问题:开发人员需要将哪些元素标记为可序列化(使用DataMember
)?
三江源
答案 0 :(得分:3)
不,这不对。 DataMember
只能应用于属性或字段 - 由AttributeTargets
定义:
[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field,
Inherited = false, AllowMultiple = false)]
public sealed class DataMemberAttribute : Attribute
{ ... }
AttributeTargets
具有Enum
和Delegate
的单独值。
分布式系统中的序列化委托或事件没有意义。您以可互操作的格式传递数据。消息只能包含数据。没有什么可以描述委托(面向对象的指针指向生活在进程内存中的方法)或事件(触发生成在进程内存中的代理)。
如果您希望在客户端上拥有数据合约事件,则必须与服务和客户之间的合同共享程序集。在这种情况下,双方将具有相同的类型(包括所有事件,方法,只读属性等),并且它们将仅传输存储在该类型实例中的数据。