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

时间:2012-02-05 13:56:24

标签: c# .net windows-phone-7 serialization persistence

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

我有一个这样的课程

namespace packetq{
    public class Packet{
        int x;
        //some other information;
    }
}  

namespace packetq{
    public class PacketState{
        Packet A;
        func<Packet,Packet>   handler;
    }
}

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

当我的应用程序墓碑时。我需要存储这个PacketState对象,以便当我恢复它时,我应该能够处理该数据包并且我应该能够使用该处理程序处理该数据包。

所以我需要序列化并保持该处理程序。

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

请提出其他一些方法。

1 个答案:

答案 0 :(得分:2)

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

因此,您可能拥有Func<Packet,Packet>基类,而不是PacketHandler基类,其虚拟方法接受并返回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]进行说明。