首页 > 代码库 > WebService中Hashtable用法
WebService中Hashtable用法
知识转自这里
code slice 01
1 /// <summary> 2 /// 反序列化数据 3 /// </summary> 4 /// <param name="sXml"></param> 5 /// <param name="type"></param> 6 /// <returns></returns> 7 private T DeSerializer<T>(String sXml, Type type) 8 { 9 XmlReader reader = XmlReader.Create(new StringReader(sXml));//还有的解释用FileStream,应该无所谓,没查出serializer.Deserialize参数类型 10 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(type);//告知需要解析的type 11 object obj = serializer.Deserialize(reader);//解析后的obj可以直接转换为type类型 12 return (T)obj; 13 }
code slice 02
1 /// <summary> 2 /// HashTable序列化Xml内容 3 /// </summary> 4 /// <param name="_ContextXml"></param> 5 /// <returns></returns> 6 [WebMethod(Description = "WebService传递HashTable值")] 7 public Boolean SetHashValue(String _ContextXml) 8 { 9 Hashtable _Hash = new Hashtable(); 10 DictionaryEntry[] _DictArray = DeSerializer<DictionaryEntry[]>(_ContextXml, typeof(DictionaryEntry[])); 11 foreach (DictionaryEntry _Entity in _DictArray) 12 { 13 _Hash.Add(_Entity.Key, _Entity.Value); 14 } 15 return true; 16 }
注:此函数的功能是避免以Hashtable为参,WebService不允许。
code slice 03
1 /// <summary> 2 /// 序列化数据类型 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 /// <param name="objToXml"></param> 6 /// <returns></returns> 7 public String Serializer<T>(T objToXml) 8 { 9 System.IO.StringWriter writer = new System.IO.StringWriter(); 10 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(objToXml.GetType()); 11 serializer.Serialize(writer, objToXml);//将ibjToXml序列化之后写进writer 12 return writer.GetStringBuilder().ToString(); 13 }
注:System.Xml.Serialization.XmlSerializer序列化
code slice 04
1 private void ClientSetHashValue() 2 { 3 4 //DemoService.Service1 _Service = new DemoService.Service1(); 5 Hashtable _Hash = new Hashtable(); 6 _Hash.Add("User", "yifeng"); 7 _Hash.Add("Address", "this is yifeng‘s Address"); 8 _Hash.Add("Age", "20");
//HashtableToDic 9 //DictionaryEntry必须先定义大小 10 DictionaryEntry[] _DictEntry = new DictionaryEntry[_Hash.Count]; 11 _Hash.CopyTo(_DictEntry, 0);//大小和Hashtable不一致也可 12 //DicToHashtable 13 String _Context = Serializer<DictionaryEntry[]>(_DictEntry); 14 Boolean _Status = _Service.SetHashValue(_Context); 15 }
Hashtable在WebService中无法使用copy函数拷贝内容至DictionaryEntry,解决方法见code slice 05(关于WebService通信,后续会记录)
code slice 05
1 proname.DictionaryEntry[] _DictEntry = new proname.DictionaryEntry[_Hash.Count] 2 int i = 0; 3 foreach(string keys in _Hash.Keys) 4 { 5 _DictEntry[i] = new proname.DictionaryEntry();//重点! 6 _DictEntry[i].Key = keys; 7 _DictEntry[i].Value =http://www.mamicode.com/ _Hash[keys]; 8 i++; 9 }
WebService中Hashtable用法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。