直接上代码:

  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Xml;
  5. using System.Xml.Serialization;
  6.  
  7. namespace Xml.Utility
  8. {
  9. public static class XmlUtil
  10. {
  11. /// <summary>
  12. /// 将一个对象序列化为XML字符串
  13. /// </summary>
  14. /// <param name="o">要序列化的对象</param>
  15. /// <param name="encoding">编码方式</param>
  16. /// <returns>序列化产生的XML字符串</returns>
  17. public static string XmlSerialize(object o, Encoding encoding)
  18. {
  19. if (o == null)
  20. {
  21. throw new ArgumentNullException("o");
  22. }
  23.  
  24. if (encoding == null)
  25. {
  26. throw new ArgumentNullException("encoding");
  27. }
  28.  
  29. using (MemoryStream stream = new MemoryStream())
  30. {
  31. XmlSerializer serializer = new XmlSerializer(o.GetType());
  32.  
  33. XmlWriterSettings settings = new XmlWriterSettings();
  34. settings.Indent = true;
  35. settings.NewLineChars = "\r\n";
  36. settings.Encoding = encoding;
  37. settings.IndentChars = " ";
  38. settings.OmitXmlDeclaration = true;
  39.  
  40. using (XmlWriter writer = XmlWriter.Create(stream, settings))
  41. {
  42. //Create our own namespaces for the output
  43. XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  44. //Add an empty namespace and empty value
  45. ns.Add("", "");
  46. serializer.Serialize(writer, o, ns);
  47. writer.Close();
  48. }
  49.  
  50. stream.Position = ;
  51. using (StreamReader reader = new StreamReader(stream, encoding))
  52. {
  53. return reader.ReadToEnd();
  54. }
  55. }
  56. }
  57.  
  58. /// <summary>
  59. /// 从XML字符串中反序列化对象
  60. /// </summary>
  61. /// <typeparam name="T">结果对象类型</typeparam>
  62. /// <param name="s">包含对象的XML字符串</param>
  63. /// <param name="encoding">编码方式</param>
  64. /// <returns>反序列化得到的对象</returns>
  65. public static T XmlDeserialize<T>(string s, Encoding encoding)
  66. {
  67. if (string.IsNullOrEmpty(s))
  68. throw new ArgumentNullException("s");
  69. if (encoding == null)
  70. throw new ArgumentNullException("encoding");
  71.  
  72. XmlSerializer mySerializer = new XmlSerializer(typeof(T));
  73. using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s)))
  74. {
  75. using (StreamReader sr = new StreamReader(ms, encoding))
  76. {
  77. return (T)mySerializer.Deserialize(sr);
  78. }
  79. }
  80. }
  81.  
  82. /// <summary>
  83. /// 将一个对象按XML序列化的方式写入到一个文件
  84. /// </summary>
  85. /// <param name="o">要序列化的对象</param>
  86. /// <param name="path">保存文件路径</param>
  87. /// <param name="encoding">编码方式</param>
  88. public static void XmlSerializeToFile(object o, string path, Encoding encoding)
  89. {
  90. if (string.IsNullOrEmpty(path))
  91. {
  92. throw new ArgumentNullException("path");
  93. }
  94.  
  95. if (o == null)
  96. {
  97. throw new ArgumentNullException("o");
  98. }
  99.  
  100. if (encoding == null)
  101. {
  102. throw new ArgumentNullException("encoding");
  103. }
  104.  
  105. using (FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write))
  106. {
  107. XmlSerializer serializer = new XmlSerializer(o.GetType());
  108.  
  109. XmlWriterSettings settings = new XmlWriterSettings();
  110. settings.Indent = true;
  111. settings.NewLineChars = "\r\n";
  112. settings.Encoding = encoding;
  113. settings.IndentChars = " ";
  114.  
  115. using (XmlWriter writer = XmlWriter.Create(file, settings))
  116. {
  117. serializer.Serialize(writer, o);
  118. writer.Close();
  119. }
  120. }
  121. }
  122.  
  123. /// <summary>
  124. /// 读入一个文件,并按XML的方式反序列化对象。
  125. /// </summary>
  126. /// <typeparam name="T">结果对象类型</typeparam>
  127. /// <param name="path">文件路径</param>
  128. /// <param name="encoding">编码方式</param>
  129. /// <returns>反序列化得到的对象</returns>
  130. public static T XmlDeserializeFromFile<T>(string path, Encoding encoding)
  131. {
  132. if (string.IsNullOrEmpty(path))
  133. throw new ArgumentNullException("path");
  134. if (encoding == null)
  135. throw new ArgumentNullException("encoding");
  136.  
  137. string xml = File.ReadAllText(path, encoding);
  138. return XmlDeserialize<T>(xml, encoding);
  139. }
  140. }
  141. }

C#中XML与对象之间的序列化、反序列化的更多相关文章

  1. php中 xml json 数组 之间相互转换

    php中 xml json  数组 之间相互转换 1 数组转json $result = array( 'status' =>$status, 'message'=>$message, ' ...

  2. Java中字节与对象之间的转换

    近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...

  3. java中Xml、json之间的相互转换

    旁白: 最近关于xml与json之间的转换都搞蒙了,这里写一个demo,以后备用. 正题: project格式是: jar包是一个一个检出来的,还算干净了. 代码: 工具类: package exer ...

  4. 关于spring中请求返回值的json序列化/反序列化问题

    https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑

  5. C#中关于XML与对象,集合的相互转换

    XML与对象,集合的相互转化 今天小伙伴在群里问了一下关于XML与对象之间的相互转换,作为菜鸟的我正好趁着闲着的时间学习了一波,直接上代码了,有疑问或者有错误的地方还请大家指正,谢谢.... usin ...

  6. .NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)

    序列化和反序列化是指什么? 序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串.反序列化(deserial ...

  7. php json与xml序列化/反序列化

    在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...

  8. .net 序列化反序列化

    .net 序列化创建对象的深拷贝 public static object DeepClone(object original) { using (MemoryStream stream = new ...

  9. .net的XML对象序列化VS WCF中xml序列化问题

    整理一下 .net 对象序列化注意事项: 1. 字段:必须是 public类型 2.属性:只读或者只写的属性不被序列化,只有 可读可写并且赋值的才可以 序列化: Someclass obj = new ...

随机推荐

  1. HDU 5438 Ponds (DFS,并查集)

    题意:给定一个图,然后让你把边数为1的结点删除,然后求连通块结点数为奇的权值和. 析:这个题要注意,如果删除一些结点后,又形成了新的边数为1的结点,也应该要删除,这是坑,其他的,先用并查集判一下环,然 ...

  2. 命令行解析getopt_long

    getopt_long函数可以轻松的解析main函数的命令行参数. int getopt_long(int argc,char * const argv[],const char *optstring ...

  3. input value的值不可改变

    同样是东钿微信服务平台,使用积分的问题,原来的版本是,默认用户不使用积分,也就没有给input赋值,后面华总说默认让用户使用积分,于是我就信誓旦旦把从后台得到用户可使用的积分赋在input上,后来,用 ...

  4. 读写锁:ReadWriteLock

    http://my.oschina.net/20076678/blog/173165   一.在JDK文档中关于读写锁的相关说明 ReadWriteLock 维护了一对相关的 锁 ,一个用于只读操作, ...

  5. JS阻塞的问题

    常见问题    http://www.zhihu.com/question/23101413   阻塞特性:        JS 有个很无语的阻塞特性,就是当浏览器在执行JS 代码时,不能同时做其他任 ...

  6. as3.0:文字 效果

    //文字描边效果var tf1 = _root.createTextField("tf1", _root.getNextHighestDepth(), 10, 10, 0, 0); ...

  7. Cache 工具类

    package com.thinkgem.jeesite.common.utils; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheM ...

  8. Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]

    在Android studio中想要运行程序,点击运行后程序安装失败,报出如下异常: 原因:在manifest中设置了 .android:sharedUserId="android.uid. ...

  9. 让网站变灰的CSS代码(支持IE、FIREFOX和CHROME)

    方法1:支持IE <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xht ...

  10. 永久改动redhat的default route

    1,能够用route命令暂时改动: route add default gw <gateway ip> 2, 通过改动/etc/sysconfig/network 文件永久改动: 脚本: ...