??? 今天要做webservice的接口,List泛型变成xml时需要转换,而且实体的属性名称也要转换成调用方明白的属性(中文),所有仿照网上的代码做了一个转换的例子。
//===================================转换方法==========================================
?/// <summary>
??????? /// 对象实例转成XML
??????? /// </summary>
??????? /// <param name="item">对象实例</param>
?????? ///<param name="dict">属性映射集合</param>
??????? /// <returns></returns>
??????? public static string EntityToXml(T item,Dictionary<string,string> dict)
??????? {
??????????? IList<T> items = new List<T>();
??????????? items.Add(item);
??????????? return EntityToXml(items,dict);
??????? }
??????? /// <summary>
??????? /// 对象实例转成xml
??????? /// </summary>
??????? /// <param name="items">对象实例集</param>
??????? /// <returns></returns>
??????? public static string EntityToXml(IList<T> items,string>? dict)
??????? {
???????????
??????????? //创建XmlDoucument文档
??????????? XmlDocument doc = new XmlDocument();
??????????? XmlElement root = doc.CreateElement(dict[typeof(T).Name+"s"]);
??????????? //设置元素的属性值
???????????? root.SetAttribute("count",items.Count.ToString());
???????????????????
??????????? //添加根元素的子元素集
??????????? foreach(T item in items)
??????????? {
??????????????? EntityToXml(doc,root,item,dict);
??????????? }
??????????? //向XmlDocument文档添加根元素
??????????? doc.AppendChild(root);
??????????? return doc.InnerXml;
??????? }
??????? private static void EntityToXml(XmlDocument doc,XmlElement root,T item,string> dict)
??????? {
??????????? //创建元素
??????????? XmlElement xmlItem = doc.CreateElement(dict[typeof(T).Name]);
??????????? XmlElement pinfoItem = null;
??????????? root.AppendChild(xmlItem);
??????????? //对象的属性集
??????????? System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
??????????? foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
??????????? {
??????????????? if (pinfo != null)
??????????????? {
???????????????????
??????????????????? //对象属性名称
??????????????????? pinfoItem = doc.CreateElement(dict[pinfo.Name]);
??????????????????? //对象属性值
??????????????????? string value = String.Empty;
??????????????????? if (pinfo.GetValue(item,null) != null)
??????????????????? {
??????????????????????? value = pinfo.GetValue(item,null).ToString();//获取对象属性值
??????????????????????? //设置元素的属性值
??????????????????? }
??????????????????? pinfoItem.InnerText = value;
??????????????? }
??????????????? //想根添加子元素
??????????????? xmlItem.AppendChild(pinfoItem);
??????????? }
??????? }
//===========================================webservice? 方法=====================================
?/// <summary>
??????? /// 以组织机构代码、发证单位和时间段查询企业获取的资质
??????? /// </summary>
??????? /// <param name="ZZJGDM">组织机构代码</param>
??????? /// <param name="startTime">开始时间(针对发证日期)</param>
??????? /// <param name="overTime">结束时间</param>
??????? ///? <param name="depart">发证单位</param>
??????? /// <returns></returns>
??????? /// <returns></returns>
??????? [WebMethod(Description = "获取企业资质信息")]
??????? public string GetCertifications( string 开始时间,string 结束时间)
??????? {
??????????? //属性名和字段中文映射
??????????? Dictionary<string,string> dict = new Dictionary<string,string>();
????????? ? dict.Add("T_Certifications","item");
????????????dict.Add("T_Certificationss","资质信息");
??????????? dict.Add("startTime","有效时间");
??????????? dict.Add("endTime","失效时间");
??????????? dict.Add("states","发布状态");?
??
??????????? List<T_Certifications> item = logic.GetCertifications(开始时间,结束时间);
??????????? return InterfaceData.Utility.ConvertDataToXML<T_Certifications>.EntityToXml(item,dict);
?????????
??????? }
?
//================================T_Certifications 实体==============================
[Serializable]
?public class T_Certifications
?{
??public T_Certifications()
??{ }
??#region Model
??public string startTime
?public string endTime;
? public string states;
?
?}
}
?
//================================调用接口返回结果=================================
<string xmlns="http://tempuri.org/"> ? <资质信息> ??? <item> ????? <有效时间>2011年1月1日</有效时间> ????? <失效时间>2011年2月1日</失效时间> ????? <发布状态> </发布状态> ??? </item> ? </资质信息> </string>