Xml序列化、反序列化帮助类

之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用

  1 /// <summary>
  2     /// 功能:Xml序列化、反序列化帮助类
  3     /// 说明:
  4     /// 创建人:
  5     /// 创建时间:2014年3月13日
  6     /// </summary>
  7     public static class XmlHelper
  8     {
  9         /// <summary>
 10         /// 私有方法,不被外部方法访问
 11         /// 序列化对象
 12         /// </summary>
 13         /// <param name="stream">流</param>
 14         /// <param name="o">对象</param>
 15         /// <param name="encoding">编码方式</param>
 16         private static void XmlSerializeInternal(Stream stream, object o, Encoding encoding)
 17         {
 18             if (o == null)
 19                 throw new ArgumentNullException("o");
 20             if (encoding == null)
 21                 throw new ArgumentNullException("encoding");
 22
 23             XmlSerializer serializer = new XmlSerializer(o.GetType());
 24
 25             XmlWriterSettings settings = new XmlWriterSettings();
 26             settings.Indent = true;
 27             settings.NewLineChars = "\r\n";
 28             settings.Encoding = encoding;
 29             settings.IndentChars = "    ";
 30
 31             using (XmlWriter writer = XmlWriter.Create(stream, settings))
 32             {
 33                 serializer.Serialize(writer, o);
 34                 writer.Close();
 35             }
 36         }
 37
 38         /// <summary>
 39         /// 序列化,将一个对象序列化为XML字符串
 40         /// </summary>
 41         /// <param name="o">要序列化的对象</param>
 42         /// <param name="encoding">编码方式</param>
 43         /// <returns>序列化产生的XML字符串</returns>
 44         public static string XmlSerialize(object o, Encoding encoding)
 45         {
 46             using (MemoryStream stream = new MemoryStream())
 47             {
 48                 XmlSerializeInternal(stream, o, encoding);
 49
 50                 stream.Position = 0;
 51                 using (StreamReader reader = new StreamReader(stream, encoding))
 52                 {
 53                     return reader.ReadToEnd();
 54                 }
 55             }
 56         }
 57
 58         /// <summary>
 59         /// 序列化,将一个对象按XML序列化的方式写入到一个文件
 60         /// </summary>
 61         /// <param name="o">要序列化的对象</param>
 62         /// <param name="path">保存文件路径</param>
 63         /// <param name="encoding">编码方式</param>
 64         public static void XmlSerializeToFile(object o, string path, Encoding encoding)
 65         {
 66             if (string.IsNullOrEmpty(path))
 67                 throw new ArgumentNullException("path");
 68
 69             using (FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write))
 70             {
 71                 XmlSerializeInternal(file, o, encoding);
 72             }
 73         }
 74
 75         /// <summary>
 76         /// 反序列化,从XML字符串中反序列化对象
 77         /// </summary>
 78         /// <typeparam name="T">结果对象类型</typeparam>
 79         /// <param name="s">包含对象的XML字符串</param>
 80         /// <param name="encoding">编码方式</param>
 81         /// <returns>反序列化得到的对象</returns>
 82         public static T XmlDeserialize<T>(string s, Encoding encoding)
 83         {
 84             if (string.IsNullOrEmpty(s))
 85                 throw new ArgumentNullException("s");
 86             if (encoding == null)
 87                 throw new ArgumentNullException("encoding");
 88
 89             XmlSerializer mySerializer = new XmlSerializer(typeof(T));
 90             using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s)))
 91             {
 92                 using (StreamReader sr = new StreamReader(ms, encoding))
 93                 {
 94                     return (T)mySerializer.Deserialize(sr);
 95                 }
 96             }
 97         }
 98
 99         /// <summary>
100         /// 反序列化,读入一个文件,并按XML的方式反序列化对象。
101         /// </summary>
102         /// <typeparam name="T">结果对象类型</typeparam>
103         /// <param name="path">文件路径</param>
104         /// <param name="encoding">编码方式</param>
105         /// <returns>反序列化得到的对象</returns>
106         public static T XmlDeserializeFromFile<T>(string path, Encoding encoding)
107         {
108             if (string.IsNullOrEmpty(path))
109                 throw new ArgumentNullException("path");
110             if (encoding == null)
111                 throw new ArgumentNullException("encoding");
112
113             string xml = File.ReadAllText(path, encoding);
114             return XmlDeserialize<T>(xml, encoding);
115         }
116     }

时间: 2024-10-11 06:39:44

Xml序列化、反序列化帮助类的相关文章

XML序列化反序列化—常用类

public class XMLSerializer    {        #region (public) xml序列化        /// <summary>        /// xml序列化        /// </summary>        /// <param name="obj">obj类</param>        /// <returns>string字符串</returns>    

XML序列化/反序列化数据库形式保存和读取。

直接上码: 首先创建class1类 public class Class1 { public string name { get; set; } public int age { get; set; } public bool sex { get; set; } } 实例化class1对象并进行序列化和反序列化 static void Main(string[] args) { //实例化class1类 Class1 c1 = new Class1() { name = "jia",

ASP.NET(C#) Json序列化反序列化帮助类Jsonhelper

原文地址:https://ken.io/note/csharp-asp.net-jsonhelper using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serialization; using System.Data; namespace Utils { /// <summary> /// JSON帮助类 /// </summary> public cl

XML 序列化与反序列化

XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param name="type">对象类型</param> /// <param name="obj">对象</param> /// <param name="fileName">序列化的XML文件路径<

c# XML序列化与反序列化 属性字段标识

序列化对象 public class People { [XmlAttribute("NAME")] public string Name { set; get; } [XmlAttribute("AGE")] public int Age { set; get; } } [XmlRoot("Root")] public class Student : People { [XmlElement("CLASS")] public

c# xml序列化和反序列化。也就是xml的解析和反解析。

用习惯了newTownSoft.json 的json反序列化.碰到xml是真的不习惯. 每次json反序列化都是直接把json丢到bejson网站生成一个实体类,稍微修改修改一点点变量名.然后直接newTownSoft反序列化,一下就得到一个实体类了.今天调某个接口,碰到xml. 记录如下. xml <response> <functionID>setItemsPics</functionID> <time>2017-09-07 15:51:04</t

XML序列化与反序列化+自定义XML注解框架XmlUtils

背景 前面一篇总结了Serializable的序列化与反序列化,现在接着总结XML.主要内容:XML基本的序列化与反序列化方法.一些注意事项.以及自定义了一个XML注解框架(简洁代码,解放双手). XML的序列化与反序列化 先与Serializable进行简单的对比: Serializable存储的文件,打开后无法正常查看,安全性高.xml文件可通过文本编辑器查看与编辑,可读性高(浏览器会格式化xml文件,更方便查看),安全性低: Serializable文件通过了签名,只能在自己的程序中反序列

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类 本节导读:本节主要介绍通过序列化接口IXmlSerializable实现XML序列化和反序列化,整理了XML基础操作及序列化的通用类(包括XML及节点的基础读写操作,XML到DataSet\DataTable互转换操作,XML序列化及反序列化通用方法等). 读前必备: A.类和类的实例 [.net 面向对象编程基础]  (9) 类和类的

C#实现接口xml序列化与反序列化

C#中接口无法被xml序列化,提示不支持.百度和bing也搜不到,只好自己动手写了 原理上肯定支持,.Net自己的xml序列化有一个IXmlSerializable接口. 自行实现该接口,并取得实现改接口的类,再进行自定义的序列化处理即可. using System.Collections; using System.Xml.Serialization; using System; using System.Xml; [XmlRoot("SerInterface"), Serializ