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文件与实体类的互相转换相关推荐

  1. 用MyEclipse自动生成hibernate映射文件和实体类

    创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤 1 创建数据库,创建 ...

  2. **Mybatis怎么自动生成Mapper文件和实体类**

    Mybatis怎么自动生成Sql Mapper文件和实体类 第一步:在resources包下建立generator.xml文件 generator.xml:文件内容 <?xml version= ...

  3. Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套

    最近在做企微开发,遇到了一个比较复杂的xml然后要去我将xml转成实体类 xml如下 <xml><ToUserName><![CDATA[toUser]]>< ...

  4. C#读取XML文件的基类实现

    刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...

  5. XMLReader—一个可以读取XML文件的java类

    在我的博文java ArrayList代替数组中有个XMLReader类,这是一个可以读取XML文件的java类,它的实现过程是怎样的呢?接下来让我们看看XMLReader的实现过程: 首先你要下载一 ...

  6. xml文件的书写及读取books.xml文件生成Book类

    books.xml文件的书写: <?xml version="1.0" encoding="UTF-8" ?> <!-- <?xml v ...

  7. Hibernate入门(IDEA下自动生成映射文件及实体类)

    1.Hibernate开发步骤 1.创建Hibernate配置文件 2.创建持久化类 3.创建对象-关系映射文件 4.通过Hibernate API编写访问数据库的代码 2.创建一个hibernate ...

  8. sql时间格式转换yyyymm_XML和实体类之间的转换

    言简意赅: 1.jar包的maven 坐标 <dependency> <groupId>com.thoughtworks.xstreamgroupId> <arti ...

  9. IntelliJ IDEA下自动生成Hibernate映射文件以及实体类

    转自:https://blog.csdn.net/qq_34197553/article/details/77718925 1.构建项目并添加项目结构配置以及配置初始参数 1.1.如图将基本的架子搭建 ...

最新文章

  1. mysql游标嵌入式_Oracle与MySQL内嵌游标的使用示例
  2. 单端 平衡 音质区别_听上去「高大上」的平衡接口,到底有什么门道?
  3. Python笔记 【无序】 【一】
  4. Lucene查询(搜索)语法示例
  5. uploadify.js
  6. 两个常用的Infopath Service读取域值的函数
  7. 一年之后 重温旧“梦”
  8. set 和 vector的简单比较
  9. [置顶] Android之Handler用法总结
  10. 【转】javascript弹出固定大小的窗口页面
  11. outlook与shairepoint2010 数据同步
  12. python php mysql_Python 操作 MySQL 的正确姿势
  13. 初识Loadrunner
  14. DataSet 用法
  15. 非北京户口的驾照到期换证小攻略(仅供参考)
  16. 一文帮你深度了解Axie Infinity-啊蟹(内含细致教程)
  17. android删除界面工具,Android手机添加/删除桌面图标和插件(图文)
  18. 核电站问题 解题报告
  19. matlab的图形功能主要包括,6、MATLAB图形功能
  20. 如何巧妙的应对突如其来的电话面试呢

热门文章

  1. 【STM32】FreeRTOS移植
  2. 小程序 wx.getBackgroundAudioManager() 手机黑屏后,让控制音频停止
  3. 每天一道LeetCode-----将数值数组按一定顺序拼接,使得拼接的结果最大
  4. java里的主线程和子线程以及finally不会执行的特殊情况
  5. framework dyld: Symbol not found: _OBJC_CLASS_xxx
  6. Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式
  7. mysql修改表结构大表_在线修改MySQL大表的表结构
  8. malloc 背后的系统知识(虚拟内存地址)
  9. 【Linux】gdb常用的调试命令
  10. 锐捷服务器虚拟化技术_数据中心边缘虚拟交换(IEEE 802.1Qbg)技术白皮书