首页新闻找找看学习计划

C#string类型的xml如何解析成实体类型

0
悬赏园豆:5 [待解决问题]

例如如下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中类型不一直,转换失败,有什么办法能在赋值的时候类型保持一致呢?

-小确幸的主页 -小确幸 | 初学一级 | 园豆:35
提问于:2018-05-30 10:30
< >
分享
所有回答(1)
0

感觉用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);
华临天下 | 园豆:1081 (小虾三级) | 2018-05-30 10:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册