public static class MySerializeXmlHelper
{
static MySerializeXmlHelper() { }

private static object _lock = new object();

#region 泛型支持

//为不支持动态参数的老接口保留,请勿删除此方法
/// <summary>
/// 使用XmlSerializer序列化对象
/// </summary>
/// <typeparam name=“T“>需要序列化的对象类型,不必须声明[Serializable]特征</typeparam>
/// <param name=“obj“>需要序列化的对象</param>
/// <returns></returns>
public static string SerializeToXmlText<T>(T obj)
{
Type t = obj.GetType();
return SerializeToXmlText(obj, t);
}
/// <summary>
/// 使用XmlSerializer序列化对象
/// </summary>
/// <typeparam name=“T“>需要序列化的对象类型,不必须声明[Serializable]特征</typeparam>
/// <param name=“obj“>需要序列化的对象</param>
/// <param name="ignoreNamespace">是否忽略命名空间(默认true)</param>
/// <returns></returns>
public static string SerializeToXmlText<T>(T obj, bool ignoreNamespace = true)
{
//Type t = typeof(T);
Type t = obj.GetType();
return SerializeToXmlText(obj, t, ignoreNamespace);
}

//为不支持动态参数的老接口保留,请勿删除此方法
/// <summary>
/// 使用XmlSerializer序列化对象
/// </summary>
/// <typeparam name=“T“>需要序列化的对象类型,不必须声明[Serializable]特征</typeparam>
/// <param name=“obj“>需要序列化的对象</param>
/// <param name="filePath"></param>
public static void SerializeFile<T>(T obj, string filePath)
{
//Type t = typeof(T);
Type t = obj.GetType();
SerializeFile(obj, t, filePath);
}
/// <summary>
/// 使用XmlSerializer序列化对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="filePath"></param>
public static void SerializeFile<T>(T obj, string filePath, bool ignoreNamespace = true)
{
//Type t = typeof(T);
Type t = obj.GetType();
SerializeFile(obj, t, filePath, ignoreNamespace);
}

/// <summary>
/// 使用XmlSerializer反序列化对象
/// </summary>
/// <param name=“xmlOfObject“>需要反序列化的xml字符串</param>
public static T DeserializeFromXmlText<T>(string xmlOfObject)
{
Type t = typeof(T);
return (T)DeserializeFromXmlText(xmlOfObject, t);
}

/// <summary>
/// 使用XmlSerializer反序列化对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="filePath"></param>
/// <returns></returns>
public static T DeSerializeFile<T>(string filePath)
{
Type t = typeof(T);
return (T)DeSerializeFile(filePath, t);
}

#endregion

#region 非泛型支持

//为不支持动态参数的老接口保留,请勿删除此方法
/// <summary>
/// 使用XmlSerializer序列化对象(不必须声明[Serializable]特征)
/// </summary>
/// <param name="obj"></param>
/// <param name="t"></param>
/// <returns></returns>
public static string SerializeToXmlText(object obj, Type t)
{
return SerializeToXmlText(obj, t, true);
}
/// <summary>
/// 使用XmlSerializer序列化对象(不必须声明[Serializable]特征)
/// </summary>
/// <param name="obj"></param>
/// <param name="t"></param>
/// <param name="ignoreNamespace"></param>
/// <returns>序列化的xml字符串</returns>
public static string SerializeToXmlText(object obj, Type t, bool ignoreNamespace =true)
{
using (MemoryStream ms = new MemoryStream())
{
XmlSerializer serializer = new XmlSerializer(t);
if (ignoreNamespace)
{
//使其不生成命名空间属性
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
serializer.Serialize(ms, obj, ns);
}
else
{
serializer.Serialize(ms, obj);
}

ms.Seek(0, SeekOrigin.Begin);
using (StreamReader reader = new StreamReader(ms, Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
}

//为不支持动态参数的老接口保留,请勿删除此方法
/// <summary>
/// 使用XmlSerializer序列化对象(不必须声明[Serializable]特征)
/// </summary>
/// <param name="obj"></param>
/// <param name="filePath"></param>
/// <param name="t"></param>
public static void SerializeFile(object obj, Type t, string filePath)
{
SerializeFile(obj, t, filePath, true);
}
/// <summary>
/// 使用XmlSerializer序列化对象(不必须声明[Serializable]特征)
/// </summary>
/// <param name="obj"></param>
/// <param name="filePath"></param>
/// <param name="t"></param>
/// <param name="ignoreNamespace"></param>
public static void SerializeFile(object obj, Type t, string filePath, bool ignoreNamespace = true)
{
string temp = SerializeToXmlText(obj, t, ignoreNamespace);
using (StreamWriter sw = File.CreateText(filePath))
{
sw.WriteLine(temp);
sw.Close();
}
}

/// <summary>
/// 使用XmlSerializer反序列化对象
/// </summary>
/// <param name=“xmlOfObject“>需要反序列化的xml字符串</param>
/// <param name="t"></param>
/// <returns></returns>
public static object DeserializeFromXmlText(string xmlOfObject, Type t)
{
using (MemoryStream ms = new MemoryStream())
{
using (StreamWriter sr = new StreamWriter(ms, Encoding.UTF8))
{
sr.Write(xmlOfObject);
sr.Flush();
ms.Seek(0, SeekOrigin.Begin);
XmlSerializer serializer = new XmlSerializer(t);
return serializer.Deserialize(ms);
}
}
}

/// <summary>
/// 使用XmlSerializer反序列化对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="filePath"></param>
/// <returns></returns>
public static object DeSerializeFile(string filePath, Type t)
{
string temp = File.ReadAllText(filePath, Encoding.UTF8);
return DeserializeFromXmlText(temp, t);
}

#endregion
}

xml序列化方式的更多相关文章

  1. 使用XML序列化实现系统配置 - 开源研究系列文章

    在实际的C#软件系统开发过程中,会遇到系统配置的保存问题,以及系统存储问题.在以前的系统开发过程中,笔者使用的是INI文件配置管理的方式.到了现在,INI文件配置保存仍然是一个平常使用的方式.在博客园 ...

  2. json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式

     JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...

  3. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

  4. XML序列化和反序列化

    上篇总结了下JSON的序列化和反序列化,博园中大牛给了很多牛叉的评论,学习了不少. 不过在上篇中忘了把json序列化和反序列化的另外一种方式写上去了,这里做个简单的补充: Json篇:http://w ...

  5. XmlSerializer 对象的Xml序列化和反序列化

    http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...

  6. XML序列化与反序列化

    public static class XmlHelper { private static void XmlSerializeInternal(Stream stream, object o, En ...

  7. 【转】Xml序列化

    XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...

  8. .net学习笔记---xml序列化

    XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...

  9. XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间.   为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...

随机推荐

  1. window.execScript的兼容性写法

    把探嗅浏览器的操作提前到代码加载的时候,在代码加载的时候就立刻进行一次判断,以便让globalEval返回一个包裹了正确逻辑的函数 var globalEval = (function(){ var ...

  2. js的client、scroll、offset详解与兼容性

    clientWidth:可视区宽说明:样式宽+padding参考:js的client详解 scrollTop : 滚动条滚动距离说明:chrome下他会以为滚动条是文档元素的,所以需要做兼容:var ...

  3. three.js 之旅 (三)

    复制自:http://www.cnblogs.com/ssrsblogs/p/5611332.html 创建模型: 1.长方体: THREE.CubeGeometry(width, height, d ...

  4. 浅析MySQL数据碎片的产生(data free)

    浅析MySQL数据碎片的产生 2011-03-30 09:28 核子可乐译 51CTO 字号:T | T MySQL列表,包括MyISAM和InnoDB这两种最常见的类型,而根据经验来说,其碎片的产生 ...

  5. ubuntu Apache 2命令

    Task: Start Apache 2 Server /启动apache服务# /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 start ...

  6. 032医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------Service层和Action层和调试

    我们上一篇文章讲了Dao层代码: 这一篇我们讲解Service层和Action层: Service层: 分为接口和实现类,我们主要看实现类:GysemplServiceImpl package yyc ...

  7. 产品经理技能之MRD的笔记之一

    原文:http://www.woshipm.com/pmd/131946.html/comment-page-1 产品经理技能之MRD 一.MRD与BRD的不同之处 BRD:这么做有什么好处,并说明好 ...

  8. echarts .NET类库开源

    前言: 2012年从长沙跑到深圳,2016年又从深圳回到长沙,兜兜转转一圈,又回到了原点.4年在深圳就呆了一家公司,回长沙也是因为深圳公司无力为继,长沙股东老板挽留,想想自己年纪也不小了.就回来了,在 ...

  9. 也来山寨一版Flappy Bird (js版)

    随着Flappy Bird的火爆,各种实现的版也不断出现,于是也手痒简单实现了一版. 其实本来只是想实现一下这只笨鸟的飞翔运动的,后来没忍住,就直接实现一个完整游戏了…… 因为这个游戏本身实现起来就没 ...

  10. js的Object和Function

    自己闲的没事干,自己想通过js的了解写一个Function和Object之间的关系,可以肯定的是我写错了,但是希望可以有所启发. Function和Object Function.__proto__ ...