2012-02-05 56 views
2

我正在爲WP7構建應用程序。我正在研究我的應用程序的墓碑部分。如何序列化WP7應用程序中的代理

而且我有一類這樣

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

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

現在我有一個實例化包對象和處理器給它一個類。

當我的應用程序墓碑。我需要存儲這個PacketState對象,以便當我恢復它時,我應該能夠處理該數據包,並且我應該能夠使用該處理程序處理該數據包。

所以我需要序列化並堅持該處理程序。

我讀了很少的文章,它說持久性和序列化可以使用表達式樹來完成。但這種方式非常麻煩。

請建議其他方式來做到這一點。

回答

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; } 
} 

但通過添加更多的子類,和國家[數據成員] 如所須。

+0

謝謝Marc。我正在使用DataContract序列化程序。請你詳細說明你的答案,我不能從中得到很多。 – rakesh 2012-02-05 14:17:20

+0

@rakesh去世編輯 – 2012-02-05 14:23:52