2012-02-05 4 views
2

WP7 용 응용 프로그램을 작성하고 있습니다. 그리고 저는 제 신청서의 일부를 삭제하려고 노력하고 있습니다.WP7 응용 프로그램에서 대리인을 serialize하는 방법

그리고

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

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

가 지금은 패킷 객체를 인스턴스화하고 여기에 핸들러를 할당하는 클래스가되도록 클래스를 가지고있다.

내 애플리케이션 삭제 표시. 이 PacketState 개체를 저장해야합니다. 다시 복원하면 해당 패킷에서 작업 할 수 있어야하며 해당 처리기를 사용하여 해당 패킷을 처리 할 수 ​​있어야합니다.

그래서 직렬화하고 해당 처리기를 유지해야합니다.

필자는 식 트리를 사용하여 지속성과 직렬화를 수행 할 수 있다고 말하는 기사는 거의 읽지 않았습니다. 그러나 그 방법은 정말로 성가신 일입니다.

다른 방법으로 제안하십시오.

답변

2

BinaryFormatter를 사용할 수 없으므로 다음과 같은 조언을 할 수 있습니다. 클래스 인스턴스 (공통 기본 유형의 서브 클래스)와 다형성 메소드를 사용하는 것이 좋습니다. 아마도 데코레이터 패턴을 사용하는 것이 좋습니다. 어떤 serializer를 사용할 것인지는 모르지만 하위 유형이 미리 알려진 경우 대부분은 상속을 처리 할 수 ​​있습니다.

그래서 대신 Func<Packet,Packet>의 당신은 Packet

가 정교하게 받아들이고 반환하는 가상 메서드와 PacketHandler 기본 수준이있을 수 있습니다

[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를 더 서브 클래스, 및 상태를 추가 ] 필요에 따라.

+0

감사합니다. DataContract Serializer를 사용하고 있습니다. 내가 그다지 할 수없는 대답을 정교하게 만들어 주시겠습니까? – rakesh

+0

@rakesh 사망 편집 –

관련 문제