我正在为 WP7 构建一个应用程序。我正在处理我的应用程序的逻辑删除部分。
我有这样一个类
namespace packetq{
public class Packet{
int x;
//some other information;
}
}
namespace packetq{
public class PacketState{
Packet A;
func<Packet,Packet> handler;
}
}
现在我有一个实例化 Packet 对象并为其分配处理程序的类。
当我的应用程序成为墓碑时。我需要存储这个 PacketState 对象,以便当我恢复它时我应该能够处理那个数据包并且我应该能够使用那个处理程序处理那个数据包。
所以我需要序列化并保留该处理程序。
我读了几篇文章说可以使用表达式树来完成持久化和序列化。但是那种方式真的很麻烦。
请推荐一些其他的方法。
最佳答案
由于 BinaryFormatter 不可用,我的建议是:改用类实例(公共(public)基类型的子类)和多态方法,也许使用装饰器模式。我不知道您打算使用哪个序列化程序,但只要事先知道子类型,大多数序列化程序都可以处理继承。
所以不是 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]声明。
关于c# - 如何在我的 WP7 应用程序中序列化委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149789/