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. git删除远程仓库的文件或目录

    git rm -r --cached a/2.txt //删除a目录下的2.txt文件   删除a目录git rm -r --cached a git commit -m "删除a目录下的2 ...

  2. AES加密时的 java.security.InvalidKeyException: Illegal key size 异常

    程序代码 // 设置加密模式为AES的CBC模式 Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); SecretKe ...

  3. PHP高效率写法及原因

    1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和非静态方法的 ...

  4. 043医疗项目-模块四:采购单模块—采购单明细查询(Dao,Service,Action三层)

    前一篇文章我们做的是在医院的角度上添加在采购单里面添加药品.这一篇文章是查看我们添加的采购单信息. 我们先看一下要实现的效果:当: 按下确认添加时,会在这里 显示出刚才添加的数据. 好,我们就来做这个 ...

  5. 代码整洁--使用CodeMaid自动程序排版

    在项目开发的过程中,如果只是验证命名规则.而没有统一程序排版,项目中很容易就会出现类似下列范例的程序代码产出.这样的产出,虽然能够正常地提供项目功能.并且符合微软的命名规则,但是因为程序排版凌乱的问题 ...

  6. redis 学习笔记(5)-Spring与Jedis的集成

    首先不得不服Spring这个宇宙无敌的开源框架,几乎整合了所有流行的其它框架,http://projects.spring.io/spring-data/从这上面看,当下流行的redis.solr.h ...

  7. python中from module import * 的一个陷阱

    from module import *把module中的成员全部导到了当前的global namespace,访问起来就比较方便了.当然,python style一般不建议这么做,因为可能引起nam ...

  8. 一道经典JS题(关于this)

    项目中碰到的问题,以前也碰到过,没有重视,现记录如下. <input type='button' value='click me' id='btn' /> <script> v ...

  9. 高性能JavaScript 循环语句和流程控制

    前言 上一篇探讨了达夫设备对于代码性能的影响,本文主要探讨并且测试各种常见的循环语句的性能以及流程控制中常见的优化. 循环语句 众所周知,常用的循环语句有for.while.do-while以及for ...

  10. c/s 自动升级(WebService)

    首先声明,本人文笔不好,大家见笑,欢迎高手吐槽. 做c/s开发肯定会遇到的就是自动升级功能,而这实现方式是非常多. 本文使用 webservice的方式来提供升级服务 首先准备服务 为了方便我们专门用 ...