关于WCF中的疑难杂症 -- 泛型类型

最近想做一个项目,考虑到需要根据用户有可能会提供不同类型的数据所以用到了泛型来实现其功能:通过RptParameters的不同方法,加入不同类型的值,并且保存在Dictionary中,由于Dictionary中的第二个参数只能以object来包含不同类型的值,这就需在WCF进行序列化时为其指明KnowTyp属性,由于属性标示要求是具体的类型,而类型只能在用户使用时才能确定,这就出现了矛盾。全部代码如下,问题出在下面代码红色部分,不能正常标示泛型属性。

 1     [DataContract]
 2      public   class  RptValue < T >   { }
 3
 4
 5     [DataContract]
 6      public   class  RptSingleValue < T >  : RptValue < T >
 7      {
 8        private T _value;
 9
10        [DataMember]
11        public T Value
12        {
13            get return _value; }
14            set { _value = value; }
15        }

16
17    }

18     
19
20     [DataContract]
21      public   class  RptFromToValue < T >  : RptValue < T >
22      {
23
24        private T _fvalue;
25
26        [DataMember]
27        public T FromValue
28        {
29            get return _fvalue; }
30            set { _fvalue = value; }
31        }

32
33
34        private T _tvalue;
35
36        [DataMember]
37        public T ToValue
38        {
39            get return _tvalue; }
40            set { _tvalue = value; }
41        }

42
43    }

44
45
46    //[KnownType(typeof(RptSingleValue))]
47    //[KnownType(typeof(RptFromToValue))]
48    //[KnownType(typeof(RptValue))]

49     [DataContract]
50      public   class  RptParameters
51      {
52        private Dictionary<string,object> _datas=new Dictionary<string,object>();
53
54        [DataMember]
55        public Dictionary<string,object> Data
56        {
57            get return _datas; }
58            set { _datas = value; }
59        }

60
61        public void AddSingleValue<T>(string name,T value){
62            if (!this._datas.ContainsKey(name))
63            {
64                RptSingleValue<T> rs = new RptSingleValue<T>();
65                rs.Value = value;
66                this._datas.Add(name, rs);
67            }

68        }

69
70
71        public void AddFromToValue<T>(string name,T fromValue,T toValue)
72        {
73            if (!this._datas.ContainsKey(name))
74            {
75                RptFromToValue<T> rft = new RptFromToValue<T>();
76                rft.FromValue = fromValue;
77                rft.ToValue = toValue;
78                this._datas.Add(name,rft);
79            }

80        }

81    }

上面代码中红色字体部分,是需要完善的地方,如果去掉注释会出现如下图的错误传到不能编译通过,如果不加上,WCF序列化则不能通过。


暂时放在首页,希望版主手下留情。这是WCF中的扩展应用,相信会有同样的问题发生在朋友身边
各位高手有同样的案例吗,你是怎么解决的?请多多交流。

转载于:https://www.cnblogs.com/Kevin-Yip/archive/2007/10/13/WCF.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值