操作 使用XML的方法
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的方法的更多相关文章
- php操作xml的方法
xml源文件 <?xml version="1.0 encoding="UTF-8"?> <humans> <zhangying> & ...
- JAVA常用的XML解析方法
转并总结自(java xml) JAVA常用的解析xml的方法有四种,分别是DOM,JAX,JDOM,DOM4j xml文件 <?xml version="1.0" enco ...
- SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- JavaScript 节点操作Dom属性和方法(转)
JavaScript 节点操作Dom属性和方法 一些常用的dom属性和方法,列出来作为手册用. 属性: 1.Attributes 存储节点的属性列表(只读) 2.childNodes 存储 ...
- 转载---SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- python的内置模块xml模块方法 xml解析 详解以及使用
一.XML介绍 xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml xml跟html都属于是标签语言 我们主要学 ...
- C# - 操作大型XML文件
对于小型XML文件,利用XDocument和XMLDocument可以很方便进行读写(推荐XDocument),但问题是XDocument和XMLDocument是In-Memory类型的,随着文件大 ...
- mybatis如何通过接口查找对应的mapper.xml及方法执行详解
转:http://www.jb51.net/article/116402.htm 本文主要介绍的是关于mybatis通过接口查找对应mapper.xml及方法执行的相关内容,下面话不多说,来看看详细的 ...
- Android网络操作的几种方法
安卓开发软件:AndroidStudio 服务器软件:Myeclipse+Tomcat 首先无论是哪种方式,安卓手机软件要想联网,必须要申请联网权限(android.permission.INTERN ...
随机推荐
- Uber优步北京第四组奖励政策
优步北京第四组: 定义为2015年7月20日至今激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最新最详细 ...
- 成都Uber优步司机奖励政策(2月17日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Java >>>运算符 和 >> 运算符
>>> 在java 表示有符号右移.什么意思呢?就是最高位符号位也会移动. 我们知道,>>表示有符号右移. -1>> 1 = -1 -1>>2 = ...
- Windows Server 2008 R2 安装域
在Windows Server 2008 R2里面安装域. 1.首先在"服务"里面添加"角色": 2.选择对应的域角色 3.安装完成后要启动配置向导 4.选择新 ...
- 关于DataTable.Select方法偶尔无法正确查到数据的处理方法
项目中经常用DataTable在内存中存储并操作数据,在进行报表开发的时候,报表的各种过滤功能用这个内存表可以大现身手,但最近在使用过程中却遇到一个奇怪的现象,现将该问题及处理方法记录一下.这是在做护 ...
- hdu1069Monkey and Banana(动态规划)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- katalon系列五:使用Katalon Studio手动编写WEB自动化脚本
上一篇主要讲了怎么录制脚本,这次我们看看怎么手动编写脚本,接下来就编写一个简单的用百度搜索的脚本. 1.我们先抓取页面上的元素,点击工具栏上的Spy Web按钮(地球上有个绿点),URL输入百度地址, ...
- flex布局笔记
flex布局: 容器: 容器主轴方向: 项目的主轴对齐方式: space-between:两端对齐,项目之间的间隔都相等. space-around:每个项目两侧的间隔相等.所以,项目之间的间隔比项目 ...
- isX字符串方法
islower():返回True,如果字符串至少有一个字母,并且所有字母都是小写: 例如:>>> spam='Hello world' >>> spam.islow ...
- Educational Codeforces Round 32 Problem 888C - K-Dominant Character
1) Link to the problem: http://codeforces.com/contest/888/problem/C 2) Description: You are given a ...