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

  读取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对应的描述字段,如下代码:

    [XmlRoot("products")]public class Products{[XmlElement("product")]public Product[] Items { get; set; }}

 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的值就可以了。

二、利用linq进行转换

这个会linq的估计都知道吧,具体不多说了,代码如下:

 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         }

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

源码下载

转载于:https://www.cnblogs.com/junjieok/p/3470530.html

读取xml文件转成ListT对象的两种方法(附源码)相关推荐

  1. 读取xml文件转成ListT对象的两种方法

    xml格式如下: <?xml version="1.0"?> <products>   <product name="West Side S ...

  2. js将图片或者文件转成base64格式的两种方法

    场景一,项目assets资源里面的图片本地图片,重点如下 需要了解 canvas的基本操作,canvas.toDataURL 方法 HTMLCanvasElement.toDataURL() 方法返回 ...

  3. python文件打包成可执行文件exe的两种方法

    python 可以做网站应用,也可以做客户端应用.但是客户端应用需要运行 py 脚本,如果用户不懂 python 就是一件比较麻烦的事情.幸好 pyton 有第三方模块可以将脚本可以转成 exe 执行 ...

  4. Java 读取 JSON 文件转成 Map 对象

    Java 读取 JSON 文件转成 Map 对象 应用场景 待读取的外部 JSON 文件 Java 代码 读取结果 Gson 应用场景 Jar 包或 War 包引用一个外部文件作为项目运行的配置文件 ...

  5. js 把字符串转成json对象的三种方法

    js 把字符串转成json对象的三种方法 不管字符串是否含有转义字符,都能转换成 Json 对象 1, js自带的eval函数,其中需要添加小括号eval('('+str+')'); function ...

  6. java 匿名list,java创造匿名对象的两种方法

    在java中有时候需要一些匿名对象的使用.可能有些小伙伴拿还不会创造,其实我们在学习一些方法时都或多或少的接触过.本篇所要讲到的创造匿名对象总结了两种方法,分别是静态工具方法和Lambda表达式,我们 ...

  7. python比较两个数的和_Python中的is和==比较两个对象的两种方法

    Python中的is和==比较两个对象的两种方法 在Python中有两种方式比较两个对象是否相等,分别是is和==,两者之间是不同的 ==比较的是值(如同java中的equals方法) is比较的是引 ...

  8. java文件指针,Java 测试文件指针,java测试指针,两种方法打开文件并进行内

    Java 测试文件指针,java测试指针,两种方法打开文件并进行内 两种方法打开文件并进行内容定位package com.ronsoft.books.nio.channels;import java. ...

  9. java中char类型转换成int类型的两种方法

    java中char类型转换成int类型的两种方法 方法一: 第一种利用Integer包装类的方法Integer.parseInt Copychar ch = '9'; if (Character.is ...

最新文章

  1. Java GUI编程:swing JTree实现树形菜单代码示例
  2. ubuntu 设置清华源、阿里云源
  3. 02 如何使用Git
  4. 软件c#语言调用摄像头,C#调用摄像头的几种方式
  5. EasyCode.Net代码生成器使用心得
  6. 云linux搭建 arm开发,arm集成开发环境搭建
  7. 无法复制_desktop:访问被拒绝的解决方法
  8. matlab 高阶(二) —— 数值、溢出问题的解决
  9. Namespace名称空间
  10. Apache Prefork、Worker和Event三种工作模式分析
  11. Linux系统移植 uboot移植 步骤
  12. 颁奖 | 阿D给你发年终奖啦~
  13. ssdt函数索引号_【转】SSDT索引号的获取
  14. 电脑作为sntp服务器配置
  15. 彻底删除windos8 打印机驱动程序
  16. NOIP2021 T3 方差
  17. linux命令 (管道命令)
  18. Python的数据分析可视化十种技能总结
  19. 教教大家vmware虚拟机安装win11的方法
  20. php验证手机号和身份证号

热门文章

  1. 【原创】linux 下远程连接windows桌面
  2. 一个透明的shader
  3. Iphone代码创建视图
  4. Facebook哭晕在厕所,调查显示用VR体验社交的用户仅为19%
  5. MySQL启动很慢的原因
  6. 智能家居物联网化将成为AWE大会最大看点
  7. WAS 报错 Font '宋体' is not available to the JVM
  8. object c 快速构建对象
  9. leetcode 279. 完全平方数(dp)
  10. leetcode 153. 寻找旋转排序数组中的最小值(二分查找)