在前一篇文章中我曾经说过,现在正在做一个小小的框架以实现采用统一的API实现对上下文(Context)信息的统一管理。这个框架同时支持Web和GUI应用,并支持跨线程传递和跨域传递(这里指在WCF服务调用中实现客户端到服务端隐式传递),以及对上下文项目(ContextItem)的读写控制。关键就在于后面两个特性的支持上面,出现一个小小的关于序列化的问题。解决方案只需要改动短短的一行代码,结果却让我折腾了老半天。
为了重现我实际遇到的问题,我特意将问题简化,为此我写了一个简单的例子(你可以从这里下载)。在下面的代码片断中,我创建了一个名称为ContextItem的类型,代表一个需要维护的上下文项。由于需要在WCF服务调用实现自动传递,我将起定义成DataContract。ContextItem包含Key,Value和ReadOnly三个属性,不用说ReadOnly表示该ContextItem可以被修改。注意Value属性Set方法的定义——如果ReadOnly则抛出异常。
)]
class ContextItem
3: {
null;
5: [DataMember]
private set; }
7: [DataMember]
object Value
9: {
10: get
11: {
value;
13: }
14: set
15: {
this.ReadOnly)
17: {
);
19: }
value;
21: }
22: }
23: [DataMember]
bool ReadOnly { get; set; }
value)
26: {
string.IsNullOrEmpty(key))
28: {
);
30: }
this.Key = key;
value;
33: }
34: }