这是转实体类的方法
public static T XmlToObjList<T>(string xml)
{
Type type = typeof(T);
object obj = Activator.CreateInstance(type, null);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
System.Reflection.PropertyInfo[] paraList = type.GetProperties();
object value = null;
foreach (XmlAttribute att in doc.DocumentElement.Attributes)
{
if (type.GetProperty(att.Name) != null)
{
value = GetPropertyValue(att.Value, type.GetProperty(att.Name).PropertyType);
type.InvokeMember(att.Name, System.Reflection.BindingFlags.SetProperty, null, obj, new object[] { value });
}
}
return (T)obj;
}
我把转换过来的实体类添加到泛型集合里面
List<Device> devicelist = new List<Device>();
if (result == 0)
{
Device dc = new Device();
XmlDocument xml = new XmlDocument();
xml.LoadXml(strbody);
//XmlNodeList xl = xml.SelectNodes("//device");等价下面
XmlNodeList xl = xml.GetElementsByTagName("device");
for (int i = 0; i < xl.Count; i++)
{
XmlNode xn = xl[i];
dc = XMLBase.XmlToObjList<Device>(xn.OuterXml);
devicelist.Add(dc);
}
}
return devicelist;
我用1000条数据测试,转换过程感觉很慢,请高手指点指点。
全用的反射,效率肯定会比较低
建议你考虑一下 .net 自带的xml反序列化这条路
.net自带的xml序列化与反序列化性能也不咋地。
使用反射性能不太好。
你可以考虑把你的实体变成值键对的形式
如 原本为:
class Student
{
public int Age{get;set;}
}
换成:
class Student
{
Dictionary<string, object> datas = new Dictionary<string,object>();
public int Age{get{return (int)datas["Age"];} set{datas["Age"] = value;}}
}
这样就不用对属性赋值了,直接对datas赋值即可
性能应该是不错的
序列化 至于XML序列化还是JSON还是二进制 看需求及接口而定