WCF序列化具體應用技巧分享
WCF已經出現就為廣大開發人員所青睞。它獨特的功能能夠幫助我們打造一個安全性極強,可跨平臺的開發解決方案。在這里我們就為大家詳細介紹一下其中一個比較重要的知識,WCF序列化的相關應用。
最近想做一個項目,考慮到需要根據用戶有可能會提供不同類型的數據所以用到了泛型來實現其功能:通過RptParameters的不同方法,加入不同類型的值,并且保存在Dictionary中,由于Dictionary中的第二個參數只能以object來包含不同類型的值,這就需在WCF序列化在進行的時候為其指明KnowTyp屬性,由于屬性標示要求是具體的類型,而類型只能在用戶使用時才能確定,這就出現了矛盾。全部代碼如下,問題出在下面代碼紅色部分,不能正常標示泛型屬性。
- [DataContract]
- public class RptValue<T> { }
- [DataContract]
- public class RptSingleValue<T> : RptValue<T>
- {
- private T _value;
- [DataMember]
- public T Value
- {
- get { return _value; }
- set { _value = value; }
- }
- }
- [DataContract]
- public class RptFromToValue<T> : RptValue<T>
- {
- 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<string,object> _datas=new Dictionary<string,object>();
- [DataMember]
- public Dictionary<string,object> Data
- {
- get { return _datas; }
- set { _datas = value; }
- }
- public void AddSingleValue<T>(string name,T value){
- if (!this._datas.ContainsKey(name))
- {
- RptSingleValue<T> rs = new RptSingleValue<T>();
- rs.Value = value;
- this._datas.Add(name, rs);
- }
- }
- public void AddFromToValue<T>(string name,T fromValue,T toValue)
- {
- if (!this._datas.ContainsKey(name))
- {
- RptFromToValue<T> rft = new RptFromToValue<T>();
- rft.FromValue = fromValue;
- rft.ToValue = toValue;
- this._datas.Add(name,rft);
- }
- }
- }
上面代碼中紅色字體部分,是需要完善的地方,如果去掉注釋會出現如下圖的錯誤傳到不能編譯通過,如果不加上,WCF序列化則不能通過。
【編輯推薦】