操作 使用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 ...
随机推荐
- Excelファイルを扱う方法
概要 データをローカルに落としたいという要件がある場合.ユーザーはExcelを希望するケースが多いだろう.そんな時は以下の汎用モジュールを使用して簡単に作る事ができます.使用方法は.GUI_UPLOA ...
- Codeforces Round #460 (Div. 2) 前三题
Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元. 题解:贪心,找最小的ai/bi. #in ...
- LeetCode: 54. Spiral Matrix(Medium)
1. 原题链接 https://leetcode.com/problems/spiral-matrix/description/ 2. 题目要求 给定一个二维整型数组,返回其螺旋顺序列表,例如: 最后 ...
- spring源码-增强容器xml解析-3.1
一.ApplicationContext的xml解析工作是通过ClassPathXmlApplicationContext来实现的,其实看过ClassPathXmlApplicationContext ...
- css 网站常用
简单的loading效果 .progressBar { border: solid 1px #303031; font: bold 20px/22px Arial, sans-serif; backg ...
- 180602-nginx多域名配置
文章链接:https://liuyueyi.github.io/hexblog/2018/06/02/180602-nginx多域名配置/ nginx多域名配置 原来的域名过期了,重新买了一个hhui ...
- katalon系列七:Katalon Studio全局变量
假如你有3个脚本都用到了用户名,如果是写死在脚本中,那么需要改变的时候,你需要修改3个地方,我们可以把用户名设为全局变量,在3个脚本中引用,需要修改时只要修改全局变量中的用户名值即可. 在Katalo ...
- Python 多线程、进程、协程上手体验
浅谈 Python 多线程.进程.协程上手体验 前言:浅谈 Python 很多人都认为 Python 的多线程是垃圾(GIL 说这锅甩不掉啊~):本章节主要给你体验下 Python 的两个库 Thre ...
- 卡片游戏 (Throwing card away I,UVa10935)
题目描述: 解题思路: 直接模拟 #include <iostream> using namespace std; ] ; int main(int argc, char *argv[]) ...
- [转载]启动tomcat时,一直卡在Deploying web application directory这块的解决方案
转载:https://www.cnblogs.com/mycifeng/p/6972446.html 本来今天正常往服务器上扔一个tomcat 部署一个项目的, 最后再启动tomcat 的时候 发现项 ...