C# 如何序列化WP7应用程序中的委托

C# 如何序列化WP7应用程序中的委托,c#,.net,windows-phone-7,serialization,persistence,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> ha

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

我有这样一门课

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

namespace packetq{
    public class PacketState{
        Packet A;
        func<Packet,Packet>   handler;
    }
}
namespace packetq{
公共类数据包{
int x;
//其他一些信息;
}
}  
名称空间包{
公共类PacketState{
包A;
func处理器;
}
}
现在我有了一个类,它实例化数据包对象并为其分配一个处理程序

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

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

我读了几篇文章,其中提到可以使用表达式树实现持久化和序列化。但这样做真的很麻烦


请建议其他方法。

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

因此,您可能有一个
PacketHandler
基类,而不是
Func
,该基类具有一个接受并返回
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]声明。

谢谢Marc。我正在使用DataContract序列化程序。你能详细说明你的答案吗?我从中得不到什么。