C#中XML与对象之间的序列化、反序列化
直接上代码:
- using System;
- using System.IO;
- using System.Text;
- using System.Xml;
- using System.Xml.Serialization;
- namespace Xml.Utility
- {
- public static class XmlUtil
- {
- /// <summary>
- /// 将一个对象序列化为XML字符串
- /// </summary>
- /// <param name="o">要序列化的对象</param>
- /// <param name="encoding">编码方式</param>
- /// <returns>序列化产生的XML字符串</returns>
- public static string XmlSerialize(object o, Encoding encoding)
- {
- if (o == null)
- {
- throw new ArgumentNullException("o");
- }
- if (encoding == null)
- {
- throw new ArgumentNullException("encoding");
- }
- using (MemoryStream stream = new MemoryStream())
- {
- XmlSerializer serializer = new XmlSerializer(o.GetType());
- XmlWriterSettings settings = new XmlWriterSettings();
- settings.Indent = true;
- settings.NewLineChars = "\r\n";
- settings.Encoding = encoding;
- settings.IndentChars = " ";
- settings.OmitXmlDeclaration = true;
- using (XmlWriter writer = XmlWriter.Create(stream, settings))
- {
- //Create our own namespaces for the output
- XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
- //Add an empty namespace and empty value
- ns.Add("", "");
- serializer.Serialize(writer, o, ns);
- writer.Close();
- }
- stream.Position = ;
- using (StreamReader reader = new StreamReader(stream, encoding))
- {
- return reader.ReadToEnd();
- }
- }
- }
- /// <summary>
- /// 从XML字符串中反序列化对象
- /// </summary>
- /// <typeparam name="T">结果对象类型</typeparam>
- /// <param name="s">包含对象的XML字符串</param>
- /// <param name="encoding">编码方式</param>
- /// <returns>反序列化得到的对象</returns>
- public static T XmlDeserialize<T>(string s, Encoding encoding)
- {
- if (string.IsNullOrEmpty(s))
- throw new ArgumentNullException("s");
- if (encoding == null)
- throw new ArgumentNullException("encoding");
- XmlSerializer mySerializer = new XmlSerializer(typeof(T));
- using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s)))
- {
- using (StreamReader sr = new StreamReader(ms, encoding))
- {
- return (T)mySerializer.Deserialize(sr);
- }
- }
- }
- /// <summary>
- /// 将一个对象按XML序列化的方式写入到一个文件
- /// </summary>
- /// <param name="o">要序列化的对象</param>
- /// <param name="path">保存文件路径</param>
- /// <param name="encoding">编码方式</param>
- public static void XmlSerializeToFile(object o, string path, Encoding encoding)
- {
- if (string.IsNullOrEmpty(path))
- {
- throw new ArgumentNullException("path");
- }
- if (o == null)
- {
- throw new ArgumentNullException("o");
- }
- if (encoding == null)
- {
- throw new ArgumentNullException("encoding");
- }
- using (FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write))
- {
- XmlSerializer serializer = new XmlSerializer(o.GetType());
- XmlWriterSettings settings = new XmlWriterSettings();
- settings.Indent = true;
- settings.NewLineChars = "\r\n";
- settings.Encoding = encoding;
- settings.IndentChars = " ";
- using (XmlWriter writer = XmlWriter.Create(file, settings))
- {
- serializer.Serialize(writer, o);
- writer.Close();
- }
- }
- }
- /// <summary>
- /// 读入一个文件,并按XML的方式反序列化对象。
- /// </summary>
- /// <typeparam name="T">结果对象类型</typeparam>
- /// <param name="path">文件路径</param>
- /// <param name="encoding">编码方式</param>
- /// <returns>反序列化得到的对象</returns>
- public static T XmlDeserializeFromFile<T>(string path, Encoding encoding)
- {
- if (string.IsNullOrEmpty(path))
- throw new ArgumentNullException("path");
- if (encoding == null)
- throw new ArgumentNullException("encoding");
- string xml = File.ReadAllText(path, encoding);
- return XmlDeserialize<T>(xml, encoding);
- }
- }
- }
C#中XML与对象之间的序列化、反序列化的更多相关文章
- php中 xml json 数组 之间相互转换
php中 xml json 数组 之间相互转换 1 数组转json $result = array( 'status' =>$status, 'message'=>$message, ' ...
- Java中字节与对象之间的转换
近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...
- java中Xml、json之间的相互转换
旁白: 最近关于xml与json之间的转换都搞蒙了,这里写一个demo,以后备用. 正题: project格式是: jar包是一个一个检出来的,还算干净了. 代码: 工具类: package exer ...
- 关于spring中请求返回值的json序列化/反序列化问题
https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑
- C#中关于XML与对象,集合的相互转换
XML与对象,集合的相互转化 今天小伙伴在群里问了一下关于XML与对象之间的相互转换,作为菜鸟的我正好趁着闲着的时间学习了一波,直接上代码了,有疑问或者有错误的地方还请大家指正,谢谢.... usin ...
- .NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
序列化和反序列化是指什么? 序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串.反序列化(deserial ...
- php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...
- .net 序列化反序列化
.net 序列化创建对象的深拷贝 public static object DeepClone(object original) { using (MemoryStream stream = new ...
- .net的XML对象序列化VS WCF中xml序列化问题
整理一下 .net 对象序列化注意事项: 1. 字段:必须是 public类型 2.属性:只读或者只写的属性不被序列化,只有 可读可写并且赋值的才可以 序列化: Someclass obj = new ...
随机推荐
- HDU 5438 Ponds (DFS,并查集)
题意:给定一个图,然后让你把边数为1的结点删除,然后求连通块结点数为奇的权值和. 析:这个题要注意,如果删除一些结点后,又形成了新的边数为1的结点,也应该要删除,这是坑,其他的,先用并查集判一下环,然 ...
- 命令行解析getopt_long
getopt_long函数可以轻松的解析main函数的命令行参数. int getopt_long(int argc,char * const argv[],const char *optstring ...
- input value的值不可改变
同样是东钿微信服务平台,使用积分的问题,原来的版本是,默认用户不使用积分,也就没有给input赋值,后面华总说默认让用户使用积分,于是我就信誓旦旦把从后台得到用户可使用的积分赋在input上,后来,用 ...
- 读写锁:ReadWriteLock
http://my.oschina.net/20076678/blog/173165 一.在JDK文档中关于读写锁的相关说明 ReadWriteLock 维护了一对相关的 锁 ,一个用于只读操作, ...
- JS阻塞的问题
常见问题 http://www.zhihu.com/question/23101413 阻塞特性: JS 有个很无语的阻塞特性,就是当浏览器在执行JS 代码时,不能同时做其他任 ...
- as3.0:文字 效果
//文字描边效果var tf1 = _root.createTextField("tf1", _root.getNextHighestDepth(), 10, 10, 0, 0); ...
- Cache 工具类
package com.thinkgem.jeesite.common.utils; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheM ...
- Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]
在Android studio中想要运行程序,点击运行后程序安装失败,报出如下异常: 原因:在manifest中设置了 .android:sharedUserId="android.uid. ...
- 让网站变灰的CSS代码(支持IE、FIREFOX和CHROME)
方法1:支持IE <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xht ...
- 永久改动redhat的default route
1,能够用route命令暂时改动: route add default gw <gateway ip> 2, 通过改动/etc/sysconfig/network 文件永久改动: 脚本: ...