XML文件与实体类的互相转换
1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config)。但是现在为了演示XML序列化和反序列化,将配置信息保存在一个XML文件(config.xml)中,通过反序列化将配置信息读取出来保存到一个单独的类(Config.cs)中。这样如果需要用到配置信息,没必要每次都读写XML文件,只需要调用Config这个类就可以获取对应节点的信息。
config.xml:
<?xml version="1.0" encoding="utf-8"?> <Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" IsAuto="true"><Description>定时扫描数据库,通过客户号和业务号读取客户信息</Description><CustomerInfos><CustomerInfo><CustomerId>0013</CustomerId><BusinessId>03</BusinessId></CustomerInfo><CustomerInfo><CustomerId>0022</CustomerId><BusinessId>02</BusinessId></CustomerInfo></CustomerInfos><ScanConfigs><BeginTime>22:00:00</BeginTime><EndTimme>23:00:00</EndTimme></ScanConfigs> </Config>
2. 为了将上面这个XML转换为想要的实体类对象,方便在程序里面读取节点数据,需要创建一个相对应的实体类,在实体类中用[XmlRoot][XmlElement][XmlAttribute]等属性标识。
Config.cs:
//XmlRoot表明这个类对应的是XML文件中的根节点 [XmlRoot(ElementName="Config")]public class Config{ //XmlElement表明这个字段对应的是XML文件中当前父节点下面的一个子节点 //ElementName就是XML里面显示的当前节点名称 //类中的字段名称与对应的XML节点的名称可以不同(比如在这里类Config中的属性ClientDescription对应XML文件中根节点Config下面的子节点Description)[XmlElement(ElementName = "Description")]public string ClientDescription { get; set; } //XmlAttribute表明这个字段是XML文件中当前节点的一个属性[XmlAttribute(AttributeName="IsAuto")]public string IsAuto { get; set; }[XmlElement(ElementName = "CustomerInfos")]public CustomerInfos CustomerInfos{get;set;}[XmlElement(ElementName = "ScanConfigs")]public ScanConfigs ScanConfigs{get;set;}}public class CustomerInfos{[XmlElement(ElementName = "CustomerInfo")]public CustomerInfo[] cs{get;set;}}public class CustomerInfo{[XmlElement(ElementName = "CustomerId")]public string CustomerId { get; set; }[XmlElement(ElementName = "BusinessId")]public string BusinessId { get; set; }}public class ScanConfigs{[XmlElement(ElementName = "BeginTime")]public string BeginTime { get; set; }[XmlElement(ElementName = "EndTimme")]public string EndTimme { get; set; }}
3. 下面的代码调用.net的XmlSerializer类的方法进行XML的反序列化
public class XmlUtil{//反序列化 //接收2个参数:xmlFilePath(需要反序列化的XML文件的绝对路径),type(反序列化XML为哪种对象类型)public static object DeserializeFromXml(string xmlFilePath, Type type){object result = null;if (File.Exists(xmlFilePath)){using (StreamReader reader = new StreamReader(xmlFilePath)){XmlSerializer xs = new XmlSerializer(type);result = xs.Deserialize(reader);}}return result;}}
4. 反序列化
string xmlPath = "d:\\config.xml";Config c = XmlUtil.DeserializeFromXml(xmlPath, typeof(Config)) as Config;
二. 序列化
1. 反过来的,也可以将Config类的一个对象序列化为XML文件.下面的代码通过调用.net的XmlSerializer类的方法将对象序列化为XML文件
public class XmlUtil{//序列化 //接收4个参数:srcObject(对象的实例),type(对象类型),xmlFilePath(序列化之后的xml文件的绝对路径),xmlRootName(xml文件中根节点名称) //当需要将多个对象实例序列化到同一个XML文件中的时候,xmlRootName就是所有对象共同的根节点名称,如果不指定,.net会默认给一个名称(ArrayOf+实体类名称)public static void SerializeToXml(object srcObject, Type type,string xmlFilePath, string xmlRootName){if (srcObject != null && !string.IsNullOrEmpty(xmlFilePath)){type = type != null ? type : srcObject.GetType();using(StreamWriter sw=new StreamWriter(xmlFilePath)){XmlSerializer xs = string.IsNullOrEmpty(xmlRootName) ?new XmlSerializer(type) :new XmlSerializer(type, new XmlRootAttribute(xmlRootName));xs.Serialize(sw, srcObject);}}}}
2. 序列化
Config config = new Config();config.ClientDescribe = "定时扫描数据库,通过客户号和业务号读取客户信息.";config.IsAuto = "true";CustomerInfo ci1 = new CustomerInfo();ci1.CustomerId = "0013";ci1.BusinessId = "03";CustomerInfo ci2 = new CustomerInfo();ci2.CustomerId = "0022";ci2.BusinessId = "02";CustomerInfos cis = new CustomerInfos();cis.cs = new CustomerInfo[] { ci1, ci2 };config.CustomerInfos = cis;ScanConfigs sc = new ScanConfigs();sc.BeginTime = "22:00:00";sc.EndTimme = "23:00:00";config.ScanConfigs = sc;XmlUtil.SerializeToXml(config, config.GetType(), "d:\\config.xml", null);
转载于:https://www.cnblogs.com/sjqq/p/7725125.html
XML文件与实体类的互相转换相关推荐
- 用MyEclipse自动生成hibernate映射文件和实体类
创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤 1 创建数据库,创建 ...
- **Mybatis怎么自动生成Mapper文件和实体类**
Mybatis怎么自动生成Sql Mapper文件和实体类 第一步:在resources包下建立generator.xml文件 generator.xml:文件内容 <?xml version= ...
- Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套
最近在做企微开发,遇到了一个比较复杂的xml然后要去我将xml转成实体类 xml如下 <xml><ToUserName><![CDATA[toUser]]>< ...
- C#读取XML文件的基类实现
刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...
- XMLReader—一个可以读取XML文件的java类
在我的博文java ArrayList代替数组中有个XMLReader类,这是一个可以读取XML文件的java类,它的实现过程是怎样的呢?接下来让我们看看XMLReader的实现过程: 首先你要下载一 ...
- xml文件的书写及读取books.xml文件生成Book类
books.xml文件的书写: <?xml version="1.0" encoding="UTF-8" ?> <!-- <?xml v ...
- Hibernate入门(IDEA下自动生成映射文件及实体类)
1.Hibernate开发步骤 1.创建Hibernate配置文件 2.创建持久化类 3.创建对象-关系映射文件 4.通过Hibernate API编写访问数据库的代码 2.创建一个hibernate ...
- sql时间格式转换yyyymm_XML和实体类之间的转换
言简意赅: 1.jar包的maven 坐标 <dependency> <groupId>com.thoughtworks.xstreamgroupId> <arti ...
- IntelliJ IDEA下自动生成Hibernate映射文件以及实体类
转自:https://blog.csdn.net/qq_34197553/article/details/77718925 1.构建项目并添加项目结构配置以及配置初始参数 1.1.如图将基本的架子搭建 ...
最新文章
- mysql游标嵌入式_Oracle与MySQL内嵌游标的使用示例
- 单端 平衡 音质区别_听上去「高大上」的平衡接口,到底有什么门道?
- Python笔记 【无序】 【一】
- Lucene查询(搜索)语法示例
- uploadify.js
- 两个常用的Infopath Service读取域值的函数
- 一年之后 重温旧“梦”
- set 和 vector的简单比较
- [置顶] Android之Handler用法总结
- 【转】javascript弹出固定大小的窗口页面
- outlook与shairepoint2010 数据同步
- python php mysql_Python 操作 MySQL 的正确姿势
- 初识Loadrunner
- DataSet 用法
- 非北京户口的驾照到期换证小攻略(仅供参考)
- 一文帮你深度了解Axie Infinity-啊蟹(内含细致教程)
- android删除界面工具,Android手机添加/删除桌面图标和插件(图文)
- 核电站问题 解题报告
- matlab的图形功能主要包括,6、MATLAB图形功能
- 如何巧妙的应对突如其来的电话面试呢
热门文章
- 【STM32】FreeRTOS移植
- 小程序 wx.getBackgroundAudioManager() 手机黑屏后,让控制音频停止
- 每天一道LeetCode-----将数值数组按一定顺序拼接,使得拼接的结果最大
- java里的主线程和子线程以及finally不会执行的特殊情况
- framework dyld: Symbol not found: _OBJC_CLASS_xxx
- Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式
- mysql修改表结构大表_在线修改MySQL大表的表结构
- malloc 背后的系统知识(虚拟内存地址)
- 【Linux】gdb常用的调试命令
- 锐捷服务器虚拟化技术_数据中心边缘虚拟交换(IEEE 802.1Qbg)技术白皮书