如何在我的WP7应用程序中序列化委托

本文关键字:序列化 应用程序 WP7 我的 | 更新日期: 2023-09-27 18:22:41

我正在为WP7构建一个应用程序。我正在处理我申请中的墓碑部分。

我有一门课,

namespace packetq{
    public class Packet{
        int x;
        //some other information;
    }
}  
namespace packetq{
    public class PacketState{
        Packet A;
        func<Packet,Packet>   handler;
    }
}

现在我有一个类,它实例化Packet对象并为其分配一个处理程序

当我的申请被删除时。我需要存储这个PacketState对象,这样当我将其恢复时,我应该能够处理该数据包,并且我应该能够使用该处理程序处理该数据集。

因此,我需要序列化并持久化该处理程序。

我读过几篇文章,它说持久性和序列化可以使用表达式树来完成。但这种方式真的很麻烦。

请建议其他方法。

如何在我的WP7应用程序中序列化委托

由于BinaryFormatter不可用,我的建议是:使用类实例(公共基类型的子类)和多态方法,也许使用装饰器模式。我不知道您打算使用哪种序列化程序,但只要预先知道子类型,大多数都可以处理继承。

因此,您可能有一个PacketHandler基类,它带有一个接受并返回Packet 的虚拟方法,而不是Func<Packet,Packet>

详细说明:

[DataContract, KnownType(typeof(EchoPacketHandler)]
public class PacketHandler {
    public virtual Packet Handle(Packet packet) { throw new NotSupportedException(); }
}
[DataContract]
public class EchoPacketHandler : PacketHandler {
    public override Packet Handle(Packet packet) { return packet; }
}

但是添加更多的子类,并根据需要通过[DataMember]进行声明。