c# - 如何在我的 WP7 应用程序中序列化委托(delegate)

标签 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 对象,以便当我恢复它时我应该能够处理那个数据包并且我应该能够使用那个处理程序处理那个数据包。

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

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

请推荐一些其他的方法。

最佳答案

由于 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/

相关文章:

.net - 从现有的winforms应用程序中分离 View 层的路径?

iphone - 如何将 GPS 坐标从 GPS 设备(iPhone、Android、WP7)存储到远程服务器?

c# - 将分层 xml 绑定(bind)到 TreeView

c# - 是否可以在 Web App Bot 中翻译自适应卡片?

c# - 将图像添加到 pictureBox

c# - 在 SQL Server 中并行插入多个项目到多个关系表?

c# - 如何在 Xamarin Forms 应用程序中拦截 Android 设备音量增大/减小按钮以打开相机?

c# - .NET 自定义控件资源.resx

c# - 如何在 WP7 上的 SQL 数据库中存储图像

c# - 在 Canvas 上画东西