读取xml文件转成ListT对象的两种方法(附源码)
读取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对象的两种方法(附源码)相关推荐
- 读取xml文件转成ListT对象的两种方法
xml格式如下: <?xml version="1.0"?> <products> <product name="West Side S ...
- js将图片或者文件转成base64格式的两种方法
场景一,项目assets资源里面的图片本地图片,重点如下 需要了解 canvas的基本操作,canvas.toDataURL 方法 HTMLCanvasElement.toDataURL() 方法返回 ...
- python文件打包成可执行文件exe的两种方法
python 可以做网站应用,也可以做客户端应用.但是客户端应用需要运行 py 脚本,如果用户不懂 python 就是一件比较麻烦的事情.幸好 pyton 有第三方模块可以将脚本可以转成 exe 执行 ...
- Java 读取 JSON 文件转成 Map 对象
Java 读取 JSON 文件转成 Map 对象 应用场景 待读取的外部 JSON 文件 Java 代码 读取结果 Gson 应用场景 Jar 包或 War 包引用一个外部文件作为项目运行的配置文件 ...
- js 把字符串转成json对象的三种方法
js 把字符串转成json对象的三种方法 不管字符串是否含有转义字符,都能转换成 Json 对象 1, js自带的eval函数,其中需要添加小括号eval('('+str+')'); function ...
- java 匿名list,java创造匿名对象的两种方法
在java中有时候需要一些匿名对象的使用.可能有些小伙伴拿还不会创造,其实我们在学习一些方法时都或多或少的接触过.本篇所要讲到的创造匿名对象总结了两种方法,分别是静态工具方法和Lambda表达式,我们 ...
- python比较两个数的和_Python中的is和==比较两个对象的两种方法
Python中的is和==比较两个对象的两种方法 在Python中有两种方式比较两个对象是否相等,分别是is和==,两者之间是不同的 ==比较的是值(如同java中的equals方法) is比较的是引 ...
- java文件指针,Java 测试文件指针,java测试指针,两种方法打开文件并进行内
Java 测试文件指针,java测试指针,两种方法打开文件并进行内 两种方法打开文件并进行内容定位package com.ronsoft.books.nio.channels;import java. ...
- java中char类型转换成int类型的两种方法
java中char类型转换成int类型的两种方法 方法一: 第一种利用Integer包装类的方法Integer.parseInt Copychar ch = '9'; if (Character.is ...
最新文章
- Java GUI编程:swing JTree实现树形菜单代码示例
- ubuntu 设置清华源、阿里云源
- 02 如何使用Git
- 软件c#语言调用摄像头,C#调用摄像头的几种方式
- EasyCode.Net代码生成器使用心得
- 云linux搭建 arm开发,arm集成开发环境搭建
- 无法复制_desktop:访问被拒绝的解决方法
- matlab 高阶(二) —— 数值、溢出问题的解决
- Namespace名称空间
- Apache Prefork、Worker和Event三种工作模式分析
- Linux系统移植 uboot移植 步骤
- 颁奖 | 阿D给你发年终奖啦~
- ssdt函数索引号_【转】SSDT索引号的获取
- 电脑作为sntp服务器配置
- 彻底删除windos8 打印机驱动程序
- NOIP2021 T3 方差
- linux命令 (管道命令)
- Python的数据分析可视化十种技能总结
- 教教大家vmware虚拟机安装win11的方法
- php验证手机号和身份证号