/// <summary> /// 解析xml字符串 轉換爲實體類列表數據 /// </summary> /// <param name="xmlStr">xml字符串</param> /// <returns></returns> /// xml字符串格式以下:(Item的節點客戶有多對,每對錶明一條數據) /// <?xml version="1.0" encoding="utf-8" ?><BOSS><Item> /// <UserId>用戶編號</UserId> /// <Type>用戶類型</Type> /// <Group>用戶羣</Group> /// <State>用戶狀態</State> /// <SIM>SIM卡號</SIM> /// <STB>機頂盒號</STB> /// <Memo>備註</Memo> /// <Crtime>建立日期</Crtime> /// <CustomerId>客戶編號</CustomerId> /// <CustomerName>客戶名稱</CustomerName> /// <Address>用戶地址</Address> /// <Phone>電話</Phone> /// <Mobile>手機</Mobile> /// </Item><Code></Code><Msg></Msg></BOSS> public List<UserInfo> GetUserList(string xmlStr) { System.Type t = typeof(UserInfo); object obj = Activator.CreateInstance(t, null);//建立指定類型實例 PropertyInfo[] fields = obj.GetType().GetProperties();//獲取指定對象的全部公共屬性 List<UserInfo> ulist = new List<UserInfo>(); XmlDocument xml = new XmlDocument(); xml.LoadXml(xmlStr);//加載xml XmlNodeList xlist = xml.GetElementsByTagName("Item");//獲取Item節點列表 foreach (XmlNode xn in xlist)//遍歷Item節點下的子節點 { object u = Activator.CreateInstance(t, null);//建立指定類型實例 foreach (PropertyInfo p in fields) { for (int i = 0; i < xn.ChildNodes.Count; ) { if (xn.ChildNodes[i].Name == p.Name) { p.SetValue(u, xn.ChildNodes[i].InnerText, null);//給建立的實例屬性賦值 } i++; } } ulist.Add((UserInfo)u); } return ulist; }
或者將該方法寫爲一個通用的方法進行調用spa
/// <summary> /// 獲取一個實體類的object數據列表 /// </summary> /// <param name="xmlStr">指定格式的xml字符串</param> /// <param name="t">實體類的發射類對象</param> /// <returns>實體類的object數據類別</returns> /// 不可直接將數據類別轉換爲實體類的真正類型數據列表,轉換時,需遍歷沒有object逐個轉換爲實體類型,而後附加到List public List<object> GetObjectList(string xmlStr, Type t) { List<object> olist = new List<object>(); object obj = Activator.CreateInstance(t, null);//建立指定類型實例 PropertyInfo[] fields = obj.GetType().GetProperties();//獲取指定對象的全部公共屬性 XmlDocument xml = new XmlDocument(); xml.LoadXml(xmlStr);//加載xml XmlNodeList xlist = xml.GetElementsByTagName("Item");//獲取Item節點列表 foreach (XmlNode xn in xlist)//遍歷Item節點下的子節點 { object u = Activator.CreateInstance(t, null);//建立指定類型實例 foreach (PropertyInfo p in fields) { for (int i = 0; i < xn.ChildNodes.Count; ) { if (xn.ChildNodes[i].Name == p.Name) { p.SetValue(u, xn.ChildNodes[i].InnerText, null);//給建立的實例屬性賦值 } i++; } } olist.Add(u); } return olist; }
string xmlStr="指定格式的xml字符串";code
System.Type t=typeof(實體類);xml
List<object> olist=GetObjectList(xmlStr,t);對象
List<實體類> list=new List<實體類>blog
然而此處存在一個問題,就是獲取的只是object類的數據列表,而且List<object> 是沒法轉換爲 List<實體類> 的,這時候咱們能夠經過遍歷的形式進行轉換utf-8
foreach(object o in olist)字符串
{string
list.Add((實體類)o);io
}class