例如如下string类型的x'm'l格式字符串,
string xmltest="<?xml version="1.0" encoding="utf-8"?><Data>
<properties name="ProductID">123</properties>
<properties name="UserName">usernmva</properties>
<properties name="Password">123</properties>
<properties name="Number">432</properties>
<properties name="TableID">321</properties>
<properties name="Stage">123</properties>
<properties name="Inning"></properties>
<properties name="NameID"></properties>
<properties name="Kind"></properties>
<properties name="Content"></properties>
<properties name="ResultType"></properties>
<properties name="Amount"></properties>
<properties name="Rate"></properties>
<properties name="Balance"></properties>
<properties name="AddTime"></properties>
</Data>";
我使用xml解析的方式解析
public static T get<T>(T tModel)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmltest);
XmlElement element = xmlDoc.DocumentElement;
T objModel = Activator.CreateInstance<T>();
foreach (XmlNode childNode in element.ChildNodes)
{
var attr = childNode.Attributes;
if (attr != null)
{
for (int i = 0; i < attr.Count; i++)
{
PropertyInfo info = objModel.GetType().GetProperty(attr[i].Value);
if (info == null) continue;
info.SetValue(objModel, childNode.InnerXml, null);
}
}
else
{
XmlNodeList xmlList = xmlDoc.ChildNodes;
foreach (XmlNode item in xmlList)
{
PropertyInfo pi = objModel.GetType().GetProperty(item.Name);
if (pi == null) continue;
if (!string.IsNullOrEmpty(item.InnerXml.Trim()))
pi.SetValue(objModel, item.InnerXml, null);
}
}
}
return objModel;
}
在第一个循环中,给 info.SetValue(objModel, childNode.InnerXml, null);chidNode.InnerXml是string 类型的,在ObjModel中类型不一直,转换失败,有什么办法能在赋值的时候类型保持一致呢?
感觉用DataSet的ReadXml比较快,毕竟是自带的方法。。。之后将DataTable转成实体类也比较简单
// 摘要: // 使用指定的文件和 System.Data.XmlReadMode 将 XML 架构和数据读入 System.Data.DataSet。 // // 参数: // fileName: // 作为读取源的文件名(包括路径)。 // // mode: // System.Data.XmlReadMode 值之一。 // // 返回结果: // 用于读取数据的 XmlReadMode。 // // 异常: // System.Security.SecurityException: // System.Security.Permissions.FileIOPermission 未设置为 System.Security.Permissions.FileIOPermissionAccess.Read。 public XmlReadMode ReadXml(string fileName, XmlReadMode mode);
已解决已解决已解决