XML序列化反序列化—常用类
public class XMLSerializer
{
#region (public) xml序列化
/// <summary>
/// xml序列化
/// </summary>
/// <param name="obj">obj类</param>
/// <returns>string字符串</returns>
public static string XMLSerialize(object obj)
{
XmlSerializer xs = new XmlSerializer(obj.GetType());
StringBuilder strBuidler = new StringBuilder();
XmlWriterSettings setting = new XmlWriterSettings();
setting.OmitXmlDeclaration = true;//去掉xml版本声明
System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create(strBuidler, setting);
XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
xmlns.Add(string.Empty, string.Empty);
xs.Serialize(xw, obj, xmlns);
xw.Close();
return strBuidler.ToString();
}
#endregion
#region (public) xml序列化
/// <summary>
/// xml序列化
/// </summary>
/// <param name="obj">obj类</param>
/// <returns>string字符串</returns>
public static string ConvertToString(object objectToConvert)
{
string xml = null;
if (objectToConvert == null)
return xml;
Type t = objectToConvert.GetType();
XmlSerializer ser = new XmlSerializer(t);
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture))
{
ser.Serialize(writer, objectToConvert, ns);
xml = writer.ToString();
writer.Close();
}
return xml;
}
#endregion
#region (public) xml反序列化
/// <summary>
/// xml反序列化
/// </summary>
/// <param name="s">字符串string</param>
/// <param name="type">obj type</param>
/// <returns>obj</returns>
public static object XMLDeserialize(string s, Type type)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(s);
s = xmlDoc.DocumentElement.OuterXml;
XmlSerializer xs = new XmlSerializer(type);
Stream stream = new System.IO.MemoryStream(System.Text.ASCIIEncoding.UTF8.GetBytes(s));
object obj = xs.Deserialize(stream);
stream.Close();
return obj;
}
#endregion
#region (public) xml反序列化
/// <summary>
/// xml to dataset
/// </summary>
/// <param name="xmlData">xml字符串</param>
/// <returns>dataset</returns>
public static DataSet XML2DataSet(string xmlData)
{
StringReader stream = null;
XmlTextReader reader = null;
try
{
DataSet xmlDS = new DataSet();
stream = new StringReader(xmlData);
reader = new XmlTextReader(stream);
xmlDS.ReadXml(reader);
return xmlDS;
}
catch (Exception ex)
{
string strTest = ex.Message;
return null;
}
finally
{
if (reader != null)
reader.Close();
}
}
#endregion
#region (public) XML反序列化
/// <summary>
/// 读取文件转化为对象
/// </summary>
/// <param name="path">路径</param>
/// <param name="objectType">对象类型</param>
/// <returns>对象</returns>
public static object ConvertFileToObject(string path, Type objectType)
{
object convertedObject = null;
if (path != null && path.Length > 0)
{
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
XmlSerializer ser = new XmlSerializer(objectType);
convertedObject = ser.Deserialize(fs);
fs.Close();
}
}
return convertedObject;
}
#endregion
#region (public) xml 反序列化
/// <summary>
/// 将xml字符串转换为对应的实体
/// </summary>
/// <typeparam name="T">实体类型</typeparam>
/// <param name="xmlDocument">xml字符串</param>
/// <returns>实体类型对象</returns>
public static T ConvertXmlToObject<T>(string xml) where T : class, new()
{
if (string.IsNullOrEmpty(xml)) return new T();
XmlSerializer serializer = new XmlSerializer(typeof(T));
T resultObject;
using (TextReader reader = new StringReader(xml))
{
resultObject = (T)serializer.Deserialize(reader);
}
return resultObject;
}
#endregion
#region(public) 对象保存为xml
/// <summary>
/// 把对象序列化为XML 并保存为文件
/// </summary>
/// <param name="objectToConvert">对象</param>
/// <param name="path">路径</param>
public static void SaveAsXML(object objectToConvert, string path)
{
if (objectToConvert != null)
{
Type t = objectToConvert.GetType();
XmlSerializer ser = new XmlSerializer(t);
using (StreamWriter writer = new StreamWriter(path))
{
ser.Serialize(writer, objectToConvert);
writer.Close();
}
}
}
#endregion
}
XML序列化反序列化—常用类的更多相关文章
- .NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
序列化和反序列化是指什么? 序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串.反序列化(deserial ...
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- C# Json库 和 xml 序列化反序列化 存在的问题
json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法: 声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...
- php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...
- .NET(C#):XML序列化时派生类的处理
原文 www.cnblogs.com/mgen/archive/2011/12/03/2275014.html 目录 1. 针对基类的XmlSerializer序列化派生类 2. 类内成员是派生类的序 ...
- C# 复杂格式多级深度XML序列化反序列化
default.xml 文件如下: <config><partnerships> <partnership name="Main_Listener" ...
- C# XML序列化/反序列化类XmlSerializer使用示例
using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...
- XML序列化/反序列化数据库形式保存和读取。
直接上码: 首先创建class1类 public class Class1 { public string name { get; set; } public int age { get; set; ...
- XML序列化反序列化
using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; nam ...
随机推荐
- 用Photoshop做圆角图片
如果图片被锁定,请“双击”图层中“背景”解锁,如果没有图层菜单,在最上面导航栏中:窗口—图层. 选用“圆角矩形工具“ 设置圆角弧度大小,设置“半径” 19 同时按Ctrl+回车(Enter)选区,再C ...
- Ch02 从零开始实例学习3
提纲:---------------------------- 演练2-3:添加控制器 知识点2-3:控制器的职责 知识点2-4:控制器的类别与方法 ------------------------- ...
- jsp 分页(数据库读取数据)
<%@ page contentType="text/html; charset=gb2312"%> <%@ page language="java&q ...
- Hadoop MapReduce编程的一些个人理解
首先要实现mapreduce就要重写两个函数,一个是map 还有一个是reduce map(key ,value) map函数有两个參数,一个是key,一个是value 假设你的输入类型是TextIn ...
- 【linux】linux根文件系统制作
欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...
- Android来电监听
本文实现来电自动接听,自动录音,自动回拨功能. public class MainActivity extends Activity { @Override protected void onCrea ...
- netduino第一步,环境配置
在netduino.com的官网介绍下,我很快就入门,现在的最新netduino的版本是4.3,但4.3是运行在win8下的,在codeplex.net上有,大部分人还使用的是win7,因此我现在采用 ...
- POJ3189_Steady Cow Assignment(二分图多重匹配/网络流+二分构图)
解题报告 http://blog.csdn.net/juncoder/article/details/38340447 题目传送门 题意: B个猪圈,N头猪.每头猪对每一个猪圈有一个惬意值.要求安排这 ...
- Duanxx的C++学习: 使用类没有被定义 原因及解决方法
今天,随着C++写的神经网络算法.我发现了一个很令人费解的问题,下面的描述一般地描述,例如: 我有两个类ClassA和ClassB,它们分别有成员变量a.b; ClassA有一个函数是这种:Funct ...
- 安装Oracle时可能碰到的常见问题-1
安装Oracle可能有些人觉得是一件非常easy的事情,但事实上是在安装的过程中蕴含着丰富的知识点.尤其安装在Linux平台,可能会碰到这样或那样各种诡异的问题,透过问题看到本质,这才是从深处理解Or ...