十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
WCF已经出现就为广大开发人员所青睐。它独特的功能能够帮助我们打造一个安全性极强,可跨平台的开发解决方案。在这里我们就为大家详细介绍一下其中一个比较重要的知识,WCF序列化的相关应用。

创新互联于2013年开始,先为酒泉等服务建站,酒泉等地企业,进行企业商务咨询服务。为酒泉企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
最近想做一个项目,考虑到需要根据用户有可能会提供不同类型的数据所以用到了泛型来实现其功能:通过RptParameters的不同方法,加入不同类型的值,并且保存在Dictionary中,由于Dictionary中的第二个参数只能以object来包含不同类型的值,这就需在WCF序列化在进行的时候为其指明KnowTyp属性,由于属性标示要求是具体的类型,而类型只能在用户使用时才能确定,这就出现了矛盾。全部代码如下,问题出在下面代码红色部分,不能正常标示泛型属性。
- [DataContract]
 - public class RptValue
 { } - [DataContract]
 - public class RptSingleValue
 : RptValue - {
 - private T _value;
 - [DataMember]
 - public T Value
 - {
 - get { return _value; }
 - set { _value = value; }
 - }
 - }
 - [DataContract]
 - public class RptFromToValue
 : RptValue - {
 - private T _fvalue;
 - [DataMember]
 - public T FromValue
 - {
 - get { return _fvalue; }
 - set { _fvalue = value; }
 - }
 - private T _tvalue;
 - [DataMember]
 - public T ToValue
 - {
 - get { return _tvalue; }
 - set { _tvalue = value; }
 - }
 - }
 - //[KnownType(typeof(RptSingleValue))]
 - //[KnownType(typeof(RptFromToValue))]
 - //[KnownType(typeof(RptValue))]
 - [DataContract]
 - public class RptParameters
 - {
 - private Dictionary
 _datas=new Dictionary (); - [DataMember]
 - public Dictionary
 Data - {
 - get { return _datas; }
 - set { _datas = value; }
 - }
 - public void AddSingleValue
 (string name,T value){ - if (!this._datas.ContainsKey(name))
 - {
 - RptSingleValue
 rs = new RptSingleValue (); - rs.Value = value;
 - this._datas.Add(name, rs);
 - }
 - }
 - public void AddFromToValue
 (string name,T fromValue,T toValue) - {
 - if (!this._datas.ContainsKey(name))
 - {
 - RptFromToValue
 rft = new RptFromToValue (); - rft.FromValue = fromValue;
 - rft.ToValue = toValue;
 - this._datas.Add(name,rft);
 - }
 - }
 - }
 
上面代码中红色字体部分,是需要完善的地方,如果去掉注释会出现如下图的错误传到不能编译通过,如果不加上,WCF序列化则不能通过。