[续]C#使用反射得到属性然后创建xml文档

续上一篇中,在方法二GetModelsFromXml中需要知道实体的具体类型,后来我发现可以使用object代替,结果成功了,现将修改的方法如下:

 

    ///   <summary>
        
///  将xml文档序列化为实体对象
        
///   </summary>
        
///   <param name="file"> 文件路径 </param>
        
///   <returns></returns>
         public  static List<Object> GetModelsFromXml( string file, Type type)
        {
            List<Object> list =  null;
             if (File.Exists(file))
            {
                list =  new List<Object>();
                 // 解析xml
                XmlDocument doc =  new XmlDocument();
                doc.Load(file);
                String root = type.Name.ToLower() +  " s ";
                XmlNode rootNode = doc.SelectSingleNode(root);
                XmlNodeList nodes = rootNode.ChildNodes;
                 foreach (XmlNode item  in nodes)
                {
                     object obj = type.Assembly.CreateInstance( " toolkit.Person "); // 注意这里必须是全类名
                    PropertyInfo[] pi = type.GetProperties();
                    XmlNodeList childs = item.ChildNodes;
                     // 遍历子节点 
                     for ( int i =  0; i < childs.Count; i++)
                    {
                        XmlNode n = childs[i];
                         // 查找属性名称和xml文档中一致的节点名称,并且设置属性值
                        List<PropertyInfo> ps = pi.Where(p => p.Name.ToLower() == n.Name).ToList();
                        ps[ 0].SetValue(obj, n.InnerText.ToString(),  null);
                    }
                    list.Add(obj);
                }
            }
             return list;
        }

调用的代码如下:

 

   List< object> persons =  new List< object>();
                persons.AddRange( new Person[]{
                 new Person(){Id= " 1 ",Name= " jay ",Age= " 23 ",Sex= " male "},
                 new Person(){Id= " 2 ",Name= " lucy ",Age= " 20 ",Sex= " female "},
                 new Person(){Id= " 3 ",Name= " mike ",Age= " 22 ",Sex= " male "}});
                Toolkit.CreateXmlByModel(persons,  " C:/Users/liyong/Desktop/1.xml "" utf-8 ");
               persons=Toolkit.GetModelsFromXml( " C:/Users/liyong/Desktop/1.xml ", typeof(Person));
                foreach ( var item  in persons)
               {
                   Console.WriteLine(item.ToString());
               }

结果输出:

转载于:https://www.cnblogs.com/Jaylong/archive/2012/09/15/2685960.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值