序列化事件是否正确? (应用DataMember属性)

时间:2011-06-06 12:28:44

标签: c# .net wcf serialization datacontract

一个非常简单的问题......

DataMember属性应用于事件或委托以将其序列化是否正确?

考虑一下我在想什么:

1)嗯,委托是一种基于其他类型的类型,因此只要这些类型本身可序列化,就不需要(不正确)序列化委托。

2)鉴于事件基于委托,并且委托(因为1中所述)不需要直接序列化,我假设事件不需要标记为可序列化。

所以,我的问题是:

将序列化属性应用于事件和转发是否正确?

如果答案是“不!不需要将它们序列化”,1)和2)是否正确?

另一个问题:开发人员需要将哪些元素标记为可序列化(使用DataMember)?

三江源

1 个答案:

答案 0 :(得分:3)

不,这不对。 DataMember只能应用于属性或字段 - 由AttributeTargets定义:

[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, 
    Inherited = false, AllowMultiple = false)]
public sealed class DataMemberAttribute : Attribute
{ ... }

AttributeTargets具有EnumDelegate的单独值。

分布式系统中的序列化委托或事件没有意义。您以可互操作的格式传递数据。消息只能包含数据。没有什么可以描述委托(面向对象的指针指向生活在进程内存中的方法)或事件(触发生成在进程内存中的代理)。

如果您希望在客户端上拥有数据合约事件,则必须与服务和客户之间的合同共享程序集。在这种情况下,双方将具有相同的类型(包括所有事件,方法,只读属性等),并且它们将仅传输存储在该类型实例中的数据。