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. Excelファイルを扱う方法

    概要 データをローカルに落としたいという要件がある場合.ユーザーはExcelを希望するケースが多いだろう.そんな時は以下の汎用モジュールを使用して簡単に作る事ができます.使用方法は.GUI_UPLOA ...

  2. Codeforces Round #460 (Div. 2) 前三题

    Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元. 题解:贪心,找最小的ai/bi. #in ...

  3. LeetCode: 54. Spiral Matrix(Medium)

    1. 原题链接 https://leetcode.com/problems/spiral-matrix/description/ 2. 题目要求 给定一个二维整型数组,返回其螺旋顺序列表,例如: 最后 ...

  4. spring源码-增强容器xml解析-3.1

    一.ApplicationContext的xml解析工作是通过ClassPathXmlApplicationContext来实现的,其实看过ClassPathXmlApplicationContext ...

  5. css 网站常用

    简单的loading效果 .progressBar { border: solid 1px #303031; font: bold 20px/22px Arial, sans-serif; backg ...

  6. 180602-nginx多域名配置

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/02/180602-nginx多域名配置/ nginx多域名配置 原来的域名过期了,重新买了一个hhui ...

  7. katalon系列七:Katalon Studio全局变量

    假如你有3个脚本都用到了用户名,如果是写死在脚本中,那么需要改变的时候,你需要修改3个地方,我们可以把用户名设为全局变量,在3个脚本中引用,需要修改时只要修改全局变量中的用户名值即可. 在Katalo ...

  8. Python 多线程、进程、协程上手体验

    浅谈 Python 多线程.进程.协程上手体验 前言:浅谈 Python 很多人都认为 Python 的多线程是垃圾(GIL 说这锅甩不掉啊~):本章节主要给你体验下 Python 的两个库 Thre ...

  9. 卡片游戏 (Throwing card away I,UVa10935)

    题目描述: 解题思路: 直接模拟 #include <iostream> using namespace std; ] ; int main(int argc, char *argv[]) ...

  10. [转载]启动tomcat时,一直卡在Deploying web application directory这块的解决方案

    转载:https://www.cnblogs.com/mycifeng/p/6972446.html 本来今天正常往服务器上扔一个tomcat 部署一个项目的, 最后再启动tomcat 的时候 发现项 ...