读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法,加上自己知道的另一种实现方法。

  就以一个简单的xml做例子。

xml格式如下:

  1. <?xml version="1.0"?>
  2. <products>
  3. <product name="West Side Story" price="9.99" supplierId="1" />
  4. <product name="Assassins" price="14.99" supplierId="2" />
  5. <product name="Frogs" price="13.99" supplierId="1" />
  6. <product name="Sweeney Todd" price="10.99" supplierId="3" />
  7. </products>

Product对象如下:

  1. public class Product
  2. {
  3. public string Name { get; set; }
  4.  
  5. public decimal Price { get; set; }
  6.  
  7. public decimal SupplierId { get; set; }
  8. }

要实现的就是要把xml文件的内容读取出来转成List<Product>对象,需求明白了,那接下来就来介绍实现的方法。

一、利用.net中的XmlSerializer类提供的方法

1、首先要在Product、Products类中的每个属性上加上与xml对应的描述字段,如下代码:

  1. [XmlRoot("products")]
  2. public class Products
  3. {
  4. [XmlElement("product")]
  5. public Product[] Items { get; set; }
  6. }
  1. public class Product
  2. {
  3. [XmlAttribute(AttributeName = "name")]
  4. public string Name { get; set; }
  5.  
  6. [XmlAttribute(AttributeName = "price")]
  7. public decimal Price { get; set; }
  8.  
  9. [XmlAttribute(AttributeName = "supplierId")]
  10. public decimal SupplierId { get; set; }
  11. }

注意AttributeName一定要和xml中的一致。

2、相应的对应关系建立好了之后,下面就来进行读取反序列化,代码如下:

  1. private static IList<Product> products=new List<Product>();
  2. static LoadXml()
  3. {
  4. try
  5. {
  6. using (TextReader reader = new StreamReader("data.xml"))
  7. {
  8. var serializer = new XmlSerializer(typeof(Products));
  9. var items = (Products)serializer.Deserialize(reader);
  10. if (items != null)
  11. {
  12. products = items.Items;
  13. }
  14. }
  15. }
  16. catch (Exception ex)
  17. {
  18. Console.WriteLine("出错了," + ex.Message);
  19. }
  20. }

这个方法里也没什么特别的就是先读取.xml内容,然后再反Deserialize方法反序化xml内容转成Products。

这种方法大致就这么简单,我个人是比较倾向于这种方法的,因为它不用自己去解析xml中相应的属性等内容,也比较灵活,xml中的属性名变了,在类中相应的属性上改一下AttributeName的值就可以了。

  1. private static IList<Product> products=new List<Product>();
  2. static LoadXml()
  3. {
  4. try
  5. {
  6. XDocument doc = XDocument.Load("data.xml");
  7. products =
  8. doc.Descendants("product")
  9. .Select(
  10. x =>
  11. new Product
  12. {
  13. Name = x.Attribute("name").ToString(),
  14. Price = (decimal)x.Attribute("price"),
  15. SupplierId = (long)x.Attribute("supplierId")
  16. })
  17. .ToList();
  18. }
  19. catch (Exception ex)
  20. {
  21. Console.WriteLine("出错了," + ex.Message);
  22. }
  23. }

以上就是这么多,其实很简单,就是记录下来,做一个笔记,如果各位看官有更好的实现方法,可以分享一下,大家互相学习学习!

(转) 读取xml文件转成List<T>对象的两种方法的更多相关文章

  1. 读取xml文件转成List<T>对象的两种方法(附源码)

    读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法, ...

  2. 取xml文件转成List<T>对象的两种方法

    读取xml文件转成List<T>对象的两种方法(附源码)   读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最 ...

  3. 在userMapper.xml文件中模糊查询的常用的3种方法

    在userMapper.xml文件中新建映射sql的标签 <!-- ******************** 模糊查询的常用的3种方式:********************* --> ...

  4. (转载)Eclipse将引用了第三方jar包的Java项目打包成可执行jar的两种方法

    转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MA ...

  5. jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

  6. C#读取XML文件的方法

    先写一个xml文件: <?xml version="1.0" encoding="utf-8" ?> <bookste> <!-- ...

  7. 在C#中创建和读取XML文件

    1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...

  8. C#中经常使用的几种读取XML文件的方法

    XML文件是一种经常使用的文件格式,比如WinForm里面的app.config以及Web程序中的web.config文件,还有很多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...

  9. 菜鸟学Java(八)——dom4j详解之读取XML文件

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

随机推荐

  1. HttpRequest

    #ifndef __HTTP_REQUEST_H__ #define __HTTP_REQUEST_H__ #include "cocos2d.h" #include " ...

  2. some scrum screenshots

    backlog tracking progress Initial Stage Next Stage End

  3. C#.net 之货币转换

    利用string.format 和cultureInfo 来进行转换 /// <summary> /// 输入Float格式数字,将其转换为货币表达方式 /// </summary& ...

  4. On Memory Leaks in Java and in Android.

    from:http://chaosinmotion.com/blog/?p=696 Just because it's a garbage collected language doesn't mea ...

  5. delphi TTreeView组件遍历磁盘目录

    TTreeView组件遍历磁盘目录 实例说明 TTreeView组件是一个以分枝结构或者说树状结构显示数据的组件,以该组件显示数据具有较好的等级关系和逻辑层次,并且易于操作.在组件中显示的数据结构与系 ...

  6. Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)

    一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/ ...

  7. 算法入门系列一--DP初步

    数字三角形(数塔问题) 其实动态规划本身并不是一个特定的算法,是一种用途广泛的问题求解方法,一种思想,一种手段. 1.1问题描述与状态定义 有一个有非负整数组成的三角形,第一行一个数字,下面各行除了最 ...

  8. android广播集合,intent,action

    android.permission.ACCESS_CHECKIN_PROPERTIES 同意读写訪问"properties"表在checkin数据库中,改值能够改动上传( All ...

  9. android147 360 程序锁

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  10. mysql 重要维护工具 图解

        下载地址: http://maatkit.org/get/mk-query-digest更多信息: http://maatkit.org/ | http://code.google.com/p ...