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. C数列下标 牛客OI赛制测试赛2

    链接:https://www.nowcoder.com/acm/contest/185/C来源:牛客网 给出一个数列 A,求出一个数列B. 其中Bi   表示 数列A中 Ai 右边第一个比 Ai 大的 ...

  2. 怎样才能使用ChipScope 加入被优化掉的信号

    在调试过程中常常遇到的一个问题就是,xilinx工具在逻辑综合的过程中,将自己RTL代码中的很多变量都优化掉了,使得调试的抓信号的过程很纠结.以下是解决方法: 1.右键synthesis,在综合选项里 ...

  3. Sql Server Profiler使用

            在使用Entity Framework的过程当中,有时候需要看Entity Framework自动生成的Sql语句,在客户端可以使用跟踪的方法看到每次查询时的Sql语句,其实通过数据库 ...

  4. ogg的安装配置 配置双向同步(含DDL)

    第一部分 先配置单向同步(含DDL) 一 源端安装GoldenGate 创建用户 创建目录 mkdir -p /opt/ogg chmod -R 777 /opt/ogg chown -R oracl ...

  5. convert-Csharp-DateTime-Ticks-to-js

    <!DOCTYPE html> <html> <head> <script> function myFunction() { var b = forma ...

  6. focus如何实现事件委托

    事件委托是利用事件冒泡机制的一种优化手段,如果有很多列表元素要绑定事件,那么就可以用事件委托来优化(不需要给每个元素都绑定事件).但是对于focus这种特殊的表单事件,它不会冒泡,那么又该如何实现这一 ...

  7. 2019年猪年海报PSD模板-第二部分

    14套精美猪年海报,免费猪年海报,下载地址:百度网盘,https://pan.baidu.com/s/1sH0U5oU-LQlaxnaWxPCrrg              

  8. cf#512 C. Vasya and Golden Ticket

    题目链接 http://codeforces.com/contest/1058/problem/C 这题还是暴力最方便,和的情况最多有n*a[i]  900种把每种都试一遍 #include<b ...

  9. Linux用户切换和密码修改

    1.普通用户切换到root su - 再输入root密码,密码正确,成功切换,再输入exit则切换回普通用户 2.root切换到其他用户,例user su - user 再输入exit,则切换回roo ...

  10. Selenium 入门到精通系列:二

    Selenium 入门到精通系列 PS:用户登录 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12 ...