using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Xml;
using System.Runtime.Serialization.Json;

namespace Common.Core
{
public class SerializationHelper
{
private static string XmlSerialize(object o)
{
XmlSerializer ser = new XmlSerializer(o.GetType());
System.IO.MemoryStream mem = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
ser.Serialize(writer, o, ns);
writer.Close();
return Encoding.UTF8.GetString(mem.ToArray());
}

private static T XmlDeserialize<T>(string s)
{
XmlDocument xdoc = new XmlDocument();
try
{
xdoc.LoadXml(s);
XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement);
XmlSerializer ser = new XmlSerializer(typeof(T));
object obj = ser.Deserialize(reader);
return (T)obj;
}
catch
{
return default(T);
}
}

private static string JsonSerialize(object o)
{
using (var ms = new MemoryStream())
{
new DataContractJsonSerializer(o.GetType()).WriteObject(ms, o);
return Encoding.UTF8.GetString(ms.ToArray());
}
}

private static T JsonDeserialize<T>(string s)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(s)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
}

/// <summary>
/// 将对象根据格式(XML/JSON)序列化成字符串结果
/// </summary>
/// <param name="o">目标对象</param>
/// <param name="format">输出格式</param>
/// <returns></returns>
public static string Serialize(object o, Format format)
{
if (format == Format.Xml)
{
return SerializationHelper.XmlSerialize(o);
}
else
{
return SerializationHelper.JsonSerialize(o);
}
}

/// <summary>
/// 将字符串根据格式(XML/JSON)反序列化成指定类型的对象
/// </summary>
/// <typeparam name="T">指定类型</typeparam>
/// <param name="s">目标字符串</param>
/// <param name="format">输入格式</param>
/// <returns></returns>
public static T Deserialize<T>(string s, Format format)
{
if (format == Format.Xml)
{
return SerializationHelper.XmlDeserialize<T>(s);
}
else
{
return SerializationHelper.JsonDeserialize<T>(s);
}
}
}
}

最新文章

  1. ul、li分列显示
  2. HTML5,jQuery,ajax基础面试
  3. Linux在目录中查找某个函数
  4. exec方法
  5. JavaScript-CheckBox全选/反选
  6. 20160207.CCPP体系详解(0017天)
  7. acess() 判断目录是否存在
  8. HTML5和CSS3实例教程[总结二]
  9. navicat 连接远程mysql
  10. Oracle索引语句整理
  11. 一个只有99行代码的JS流程框架(二)
  12. eclipse项目中丢失的R包找回方法
  13. WebSocket群聊与单聊
  14. Windows 控制面板调用命令
  15. PHP中$_POST和$_GET的用法
  16. mysql DISTINCT的用法
  17. Mysql初级第二天(wangyun)
  18. HP Notebook PCs - Updating the BIOS
  19. outlook还原初始设置
  20. stl算法:next_permutation剖析

热门文章

  1. iOS之tabBar随tableView的滑动而隐藏/显现
  2. Mysql Error: Host ‘xxx.xxx.xxx.xxx’ is not allowed to connect to
  3. VR技术的高速发展阶段
  4. (转).NET开发人员必备的可视化调试工具(你值的拥有)
  5. Oracl基础知识(一)
  6. 51nod1228 序列求和(自然数幂和)
  7. xamarin.Android 标记1
  8. 【转】Java Web 项目获取运行时路径 classpath
  9. Android 框架练成 教你打造高效的图片加载框架(转)
  10. 2016 Multi-University Training Contest 1