XmlHelper是一个工具类

  public static class XMLHelper
{
/// <summary>
/// XML的编码方式,默认是UTF-8
/// </summary>
public static Encoding xmlEncode;
/// <summary>
/// 静态的构造函数,初始化此类
/// </summary>
static XMLHelper()
{
xmlEncode = Encoding.UTF8;
} /// <summary>
/// 将对象序列化为XML写入到流中
/// </summary>
/// <param name="stream">要写入的流</param>
/// <param name="obj">被写入的对象</param>
static void XmlSerializeInternal(Stream stream, Object obj)
{
//创建序列化对象,只有public的class才可以进行xml序列化
XmlSerializer serialize = new XmlSerializer(obj.GetType());
//创建写入对象
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;/*表示缩进*/
settings.IndentChars = " ";/*表示缩进的距离为一个Tab*/
settings.NewLineChars = "\r\n";/*换行符,Window下换行符*/
settings.Encoding = xmlEncode;/*编码方式*/
//开始正式写入
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
serialize.Serialize(writer, obj);
}
} /// <summary>
/// 将对象序列化为xml并返回xml字符串
/// </summary>
/// <param name="obj">对象</param>
/// <returns>序列化后的xml字符串</returns>
public static String XmlSerializeFromString(Object obj)
{
//创建内存流对象
using (MemoryStream stream = new MemoryStream())
{
//将对象以xml形式写入到内存流中
XmlSerializeInternal(stream, obj);
stream.Position = ;/*设置流的的位置在开始处,以便我们可以从头读取,和stream.Seek(0, SeekOrigin.Begin);一样*/
using (StreamReader reader = new StreamReader(stream, xmlEncode))
{
return reader.ReadToEnd();/*代码很花哨,几乎都是语法糖*/
}
}
} /// <summary>
/// 将对象按照xml序列化写入到文件中
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="obj">写入的对象</param>
public static void XmlSerializeToFile(String path, Object obj)
{
//创建文件写入流对象
using (FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write))
{
//写入将对象转成xml流的对象
XmlSerializeInternal(file, obj);
}
} /// <summary>
/// 将xml字符串转成对象
/// </summary>
/// <typeparam name="T">要转换的对象</typeparam>
/// <param name="xmlStr">xml字符串</param>
/// <returns>返回转换的对象</returns>
public static T XmlDeserializeFromObject<T>(String xmlStr)
{
//以前刚学泛型时,就是感觉泛型好流弊,就是不明白这个词是什么意思.后来觉得模板更加贴切
XmlSerializer serialize = new XmlSerializer(typeof(T));
//创建内存流并进行转换
using (MemoryStream stream = new MemoryStream(xmlEncode.GetBytes(xmlStr)))
{
//采用StreamReader是为了编码
using (StreamReader reader = new StreamReader(stream, xmlEncode))
{
return (T)serialize.Deserialize(reader);
}
}
} /// <summary>
/// 将xml文件序列化为对象
/// </summary>
/// <typeparam name="T">泛型,待指定的类型</typeparam>
/// <param name="path">文件绝对全路径字符串</param>
/// <returns>返回对象</returns>
public static T XmlDeserializeFromFile<T>(String path)
{
//创建xml反序列化对象
XmlSerializer serialize = new XmlSerializer(typeof(T));
//获取xml文件流,并反序列化转成对象并返回
using (StreamReader reader = new StreamReader(path, xmlEncode))
{
return (T)serialize.Deserialize(reader);
}
}
}

调用使用工具类

// 1. 首先要创建或者得到一个数据对象
Order order = GetOrderById(); // 2. 用序列化的方法生成XML
string xml = XmlHelper.XmlSerialize(order, Encoding.UTF8); // 3. 从XML读取数据并生成对象
Order order2 = XmlHelper.XmlDeserialize<Order>(xml, Encoding.UTF8);

操作 使用XML的方法的更多相关文章

  1. php操作xml的方法

    xml源文件 <?xml version="1.0 encoding="UTF-8"?> <humans> <zhangying> & ...

  2. JAVA常用的XML解析方法

    转并总结自(java xml) JAVA常用的解析xml的方法有四种,分别是DOM,JAX,JDOM,DOM4j xml文件 <?xml version="1.0" enco ...

  3. SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除

    /*------------------------------------------------------------------------------+ #| = : = : = : = : ...

  4. JavaScript 节点操作Dom属性和方法(转)

    JavaScript 节点操作Dom属性和方法   一些常用的dom属性和方法,列出来作为手册用. 属性:   1.Attributes 存储节点的属性列表(只读)   2.childNodes 存储 ...

  5. 转载---SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除

    /*------------------------------------------------------------------------------+ #| = : = : = : = : ...

  6. python的内置模块xml模块方法 xml解析 详解以及使用

    一.XML介绍 xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml xml跟html都属于是标签语言 我们主要学 ...

  7. C# - 操作大型XML文件

    对于小型XML文件,利用XDocument和XMLDocument可以很方便进行读写(推荐XDocument),但问题是XDocument和XMLDocument是In-Memory类型的,随着文件大 ...

  8. mybatis如何通过接口查找对应的mapper.xml及方法执行详解

    转:http://www.jb51.net/article/116402.htm 本文主要介绍的是关于mybatis通过接口查找对应mapper.xml及方法执行的相关内容,下面话不多说,来看看详细的 ...

  9. Android网络操作的几种方法

    安卓开发软件:AndroidStudio 服务器软件:Myeclipse+Tomcat 首先无论是哪种方式,安卓手机软件要想联网,必须要申请联网权限(android.permission.INTERN ...

随机推荐

  1. uCrop 源码剖析

    GitHub: uCrop, 版本为 2.2.2 主要是探究一下内部对于图片按比例的裁剪以及压缩, 应该会更很长一段时间 疑惑点 这里记下一些源码分析过程中遇到的疑惑点 sample/src/main ...

  2. C#学习第一阶段——语法基础

    C#是一门面向对象的编程语言.在面向对象的程序设计方法中,程序由各种相互交互的对象组成.相同种类的对象具有相同的属性,或者说是在相同的class 中的.       例如,以矩形为例,它具有高(len ...

  3. 《C++ Primer》第II部分:C++标准库

    <C++ Primer>第II部分:C++标准库 前言 把<C++ Primer>读薄系列笔记.本篇为第II部分C++标准库,包含全书第8-12章重难点: IO库 顺序容器 范 ...

  4. Java:二进制(原码、反码、补码)与位运算

    一.二进制(原码.反码.补码) 二进制的最高位是符号位(“0”代表正数,“1”代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1.  原码:将一个整数转换成二进制表示 以 int ...

  5. 全新Ubuntu-13.04安装配置redmine

    1. apt-get install  vim  apache2 libapache2-mod-passenger ruby rubygems libruby ruby-dev  libmagickc ...

  6. python generator

    def reverse(data): for index in range(len(data)-1, -1, -1): yield data[index] for char in reverse('g ...

  7. 前端开发工程师 - 01.页面制作 - 第3章.HTML

    第3章--HTML HTML简介 Hyper Text Markup Language:超文本标记语言--用于标记网页的内容 history: html(1991)雏形 -> html4.01( ...

  8. 使用flask_limiter设定API配额

    前言 闲来无事,突然想到了以前做过的关于后台API安全方面的事,关于接口访问配额的设置,flask有没有很好的库支持呢?一找还真有!主要是对照了库的官方文档自己写了下dome,以供参考. # -*- ...

  9. 深入理解 Vuejs 动画效果

    本文主要归纳在 Vuejs 学习过程中对于 Vuejs 动画效果的各个相关要点.由于本人水平有限,如文中出现错误请多多包涵并指正,感谢.如果需要看更清晰的代码高亮,请跳转至我的个人站点的 深入理解 V ...

  10. 告别加载dll 出错开机加载项大揭秘

    提到开机加载(load)项,大家不要以为就是系统启动(run)项.最简单的例子是,杀毒软件或者用户手动删除病毒文件后,注册表中的自动加载信息仍在,登陆系统时就会提示"加载*dll出错,系统找 ...