XML和实体类之间相互转换(序列化和反序列化)

XML文件与实体类的互相转换

 
通过我前面的几篇收藏的文章,今天来自己做个对实体类对象序列化和反序列化的汇总,以下代码是经过上面文章的参考,然后稍加改动。
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5.  
  6. using System.Xml.Serialization;
  7.  
  8. namespace CarWash.Station.Comm
  9. {
  10. public class XmlUtil
  11. {
  12. //序列化
  13. //接收4个参数:srcObject(对象的实例),type(对象类型),xmlFilePath(序列化之后的xml文件的绝对路径),xmlRootName(xml文件中根节点名称)
  14. //当需要将多个对象实例序列化到同一个XML文件中的时候,xmlRootName就是所有对象共同的根节点名称,如果不指定,.net会默认给一个名称(ArrayOf+实体类名称)
  15. public static string SerializeToXml(object obj, Type type=null)
  16. {
  17. string str = "";
  18.  
  19. if (obj != null)
  20. {
  21. type = type != null ? type : obj.GetType();
  22. using (MemoryStream ms = new MemoryStream())
  23. {
  24. using (StreamReader sr = new StreamReader(ms))
  25. {
  26. XmlSerializer xs = new XmlSerializer(type);
  27. xs.Serialize(ms, obj);
  28. ms.Position = ;
  29. str = sr.ReadToEnd();
  30. }
  31. }
  32. }
  33. return str;
  34. }
  35.  
  36. public static byte[] SerializeToStream(object obj, Type type)
  37. {
  38. byte[] result = null;
  39.  
  40. if (obj != null)
  41. {
  42. type = type != null ? type : obj.GetType();
  43. using (MemoryStream ms = new MemoryStream())
  44. {
  45. ms.Position = ;
  46. XmlSerializer xs = new XmlSerializer(type);
  47. xs.Serialize(ms, obj);
  48. result = ms.ToArray();
  49. }
  50. }
  51. return result;
  52. }
  53.  
  54. //反序列化
  55. //接收2个参数:xmlFilePath(需要反序列化的XML文件的绝对路径),type(反序列化XML为哪种对象类型)
  56. public static object DeserializeFromXml(string xml, Type type)
  57. {
  58. object result = null;
  59. if (!string.IsNullOrEmpty(xml))
  60. {
  61. using (StringReader sr = new StringReader(xml))
  62. {
  63. XmlSerializer xs = new XmlSerializer(type);
  64. result = xs.Deserialize(sr);
  65. }
  66. }
  67. return result;
  68. }
  69.  
  70. /// <summary>
  71. /// 反序列化
  72. /// </summary>
  73. /// <param name="type"></param>
  74. /// <param name="xml"></param>
  75. /// <returns></returns>
  76. public static object DeserializeFromStream(Stream stream, Type type)
  77. {
  78. object result = null;
  79. if (stream != null)
  80. {
  81. XmlSerializer xmldes = new XmlSerializer(type);
  82. result = xmldes.Deserialize(stream);
  83. }
  84. return result;
  85. }
  86.  
  87. }
  88.  
  89. }

使用方式和实例我就不介绍,可看前面的几篇文章,他们都有比较详细的说明。

以上文字纯属个人总结,全部手动输入,如果引用请注明出处。

总结:实体类和(XML或二进制)之间相互转(序列化和反序列化)的更多相关文章

  1. 利用JAXB实现java实体类和xml互相转换

    1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...

  2. C#实体类生成XML与XML Schema文档

    一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...

  3. 简单实体类和xml文件的相互转换

    最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...

  4. 使用C#实现实体类和XML相互转换

    一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...

  5. 实现实体类和Xml相互转化

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  6. C#实体类与XML相互转换

    1.实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化. 把XML转换成相应的实体类,需要使用到XmlSerializer类的De ...

  7. C# 实现实体类和Xml转换

    一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...

  8. 实体类转xml

    看项目中需要实体类转xml,大家是拼接的.感觉可以利用反射实现.于是写了下 代码如下 package com.kevin.util; import org.springframework.util.O ...

  9. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

随机推荐

  1. 财经世界(2)A股B股和H股

    在发行过程中,公司通过章程给不同股份形式赋予不同的权益,使公司股份出现A股.B股等形式.我国上市公司的股票有A股.B股.H股.N股.S股等的区分.这一区分的主要依据股票的上市地点和所面对的投资者而定. ...

  2. mysql case的语法

    测试表:team 第一种语法: CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_ ...

  3. 建议47:使用logging记录日志信息

    # -*- coding:utf-8 -*- ''' Python中自带的logging 模块提供了日志功能,它将logger 的level 分为5 个级别 DEBUG 详细的信息,在追踪问题的时候使 ...

  4. Android 使用OpenCV的三种方式(Android Studio)

    http://blog.csdn.net/sbsujjbcy/article/details/49520791 其实最早接触OpenCV是很久很久之前的事了,大概在2013年的5,6月份,当时还是个菜 ...

  5. Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair)

    Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair) 引入 1. 进程和APP通信 创建进程 读取.分发 - 进程发送输入事件给APP 进程读取APP回应的事件 输 ...

  6. vRO Extend VirtualDisk Workflow

    https://vbombarded.wordpress.com/2015/02/20/vrealize-orchestrator-extend-virtual-disk-workflow/ var ...

  7. Docker 配置代理

    最近在k8s上部署helm 老提示无法下载镜像,因为伟大的祖国的长城Firewall....导致k8s根本玩不了..... 第一步:配置系统代理 # vim .bashrc export http_p ...

  8. java instrumentation &JVMTI

    Java Instrumentation (参考:http://www.ibm.com/developerworks/cn/java/j-lo-jse61/) 简介: 使用Instrumentatio ...

  9. struts2实现文件的上传和下载实例[转]

    实现原理 Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器 ...

  10. hibernate报错org.hibernate.HibernateException: No CurrentSessionContext configured!

    org.hibernate.HibernateException: No CurrentSessionContext configured! at org.hibernate.internal.Ses ...