SerializeHelper

using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization.Formatters.Soap;
using System.Runtime.Serialization.Formatters.Binary;

public class SerializeHelper
{
    public SerializeHelper()
    { }

#region XML序列化
    /// <summary>
    /// 文件化XML序列化
    /// </summary>
    /// <param name="obj">对象</param>
    /// <param name="filename">文件路径</param>
    public static void Save(object obj, string filename)
    {
        FileStream fs = null;
        try
        {
            fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
            XmlSerializer serializer = new XmlSerializer(obj.GetType());
            serializer.Serialize(fs, obj);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (fs != null) fs.Close();
        }
    }

/// <summary>
    /// 文件化XML反序列化
    /// </summary>
    /// <param name="type">对象类型</param>
    /// <param name="filename">文件路径</param>
    public static object Load(Type type, string filename)
    {
        FileStream fs = null;
        try
        {
            fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            XmlSerializer serializer = new XmlSerializer(type);
            return serializer.Deserialize(fs);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (fs != null) fs.Close();
        }
    }

/// <summary>
    /// 文本化XML序列化
    /// </summary>
    /// <param name="item">对象</param>
    public string ToXml<T>(T item)
    {
        XmlSerializer serializer = new XmlSerializer(item.GetType());
        StringBuilder sb = new StringBuilder();
        using (XmlWriter writer = XmlWriter.Create(sb))
        {
            serializer.Serialize(writer, item);
            return sb.ToString();
        }
    }

/// <summary>
    /// 文本化XML反序列化
    /// </summary>
    /// <param name="str">字符串序列</param>
    public T FromXml<T>(string str)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        using (XmlReader reader = new XmlTextReader(new StringReader(str)))
        {
            return (T)serializer.Deserialize(reader);
        }
    }
    #endregion

#region Json序列化
    /// <summary>
    /// JsonSerializer序列化
    /// </summary>
    /// <param name="item">对象</param>
    public string ToJson<T>(T item)
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
        using (MemoryStream ms = new MemoryStream())
        {
            serializer.WriteObject(ms, item);
            return Encoding.UTF8.GetString(ms.ToArray());
        }
    }

/// <summary>
    /// JsonSerializer反序列化
    /// </summary>
    /// <param name="str">字符串序列</param>
    public T FromJson<T>(string str) where T : class
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(str)))
        {
            return serializer.ReadObject(ms) as T;
        }
    }
    #endregion

#region SoapFormatter序列化
    /// <summary>
    /// SoapFormatter序列化
    /// </summary>
    /// <param name="item">对象</param>
    public string ToSoap<T>(T item)
    {
        SoapFormatter formatter = new SoapFormatter();
        using (MemoryStream ms = new MemoryStream())
        {
            formatter.Serialize(ms, item);
            ms.Position = 0;
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(ms);
            return xmlDoc.InnerXml;
        }
    }

/// <summary>
    /// SoapFormatter反序列化
    /// </summary>
    /// <param name="str">字符串序列</param>
    public T FromSoap<T>(string str)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(str);
        SoapFormatter formatter = new SoapFormatter();
        using (MemoryStream ms = new MemoryStream())
        {
            xmlDoc.Save(ms);
            ms.Position = 0;
            return (T)formatter.Deserialize(ms);
        }
    }
    #endregion

#region BinaryFormatter序列化
    /// <summary>
    /// BinaryFormatter序列化
    /// </summary>
    /// <param name="item">对象</param>
    public string ToBinary<T>(T item)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (MemoryStream ms = new MemoryStream())
        {
            formatter.Serialize(ms, item);
            ms.Position = 0;
            byte[] bytes = ms.ToArray();
            StringBuilder sb = new StringBuilder();
            foreach (byte bt in bytes)
            {
                sb.Append(string.Format("{0:X2}", bt));
            }
            return sb.ToString();
        }
    }

/// <summary>
    /// BinaryFormatter反序列化
    /// </summary>
    /// <param name="str">字符串序列</param>
    public T FromBinary<T>(string str)
    {
        int intLen = str.Length / 2;
        byte[] bytes = new byte[intLen];
        for (int i = 0; i < intLen; i++)
        {
            int ibyte = Convert.ToInt32(str.Substring(i * 2, 2), 16);
            bytes[i] = (byte)ibyte;
        }
        BinaryFormatter formatter = new BinaryFormatter();
        using (MemoryStream ms = new MemoryStream(bytes))
        {
            return (T)formatter.Deserialize(ms);
        }
    }
    #endregion
}

时间: 2024-11-08 08:14:08

SerializeHelper的相关文章

数据导出至Excel文件--好库编程网http://code1.okbase.net/codefile/SerializeHelper.cs_2012122018724_118.htm

using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; /// <summary> /// Excel操作类 /// </summary> /// Microsoft Excel 11.0 Obj

C# 开发微信扫码登录

一,JS 代码参考 <script type="text/javascript"> function GetRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("

C#序列化链表

场景简化:    程序中的数据每隔1s实时获得的,存储到链表里,需要及时保存到文件里去.    之前的方法是把链表对象序列化到文件里去,好处是不需要太多处理,不用管链表中是否有元素(相对于后面的第三种方法而言).可是这样有个问题,每次都得把整个链表序列化到文件里去,当数据多了之后开销挺大的.直觉上应该是每次只把新增的数据追加到文件里就可以了. 为了简洁起见,把异常处理,局部变量声明等的都去了.每次只贴出修改过的类的代码,MeasuredValue是一个类,存储了采集到的数据. 第一版的代码如下:

分布式缓存学习总结

一.分布式缓存简图 二.为什么使用Memcached分布式缓存呢? 三.Memcached基础原理 四.Memcache下载与安装 五.MencacheHelper.cs 示例使用 结合Session与项目配置缓存 六.Redis和Memcache的区别总结 一.分布式缓存简图 二.为什么使用Memcached分布式缓存呢? 首先先讲讲为何要缓存,在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已

剑指offer---序列化二叉树

/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public:     void serializeHelper(TreeNode *node, string& s)     {         if (node == NULL)     

持久化一个对象

1.对象与文件之间序列化/反序列化 public static void SerializeToFile<T>(T obj,string dataFile) { using (FileStream fileStram = File.Create(dataFile)) { BinaryFormatter binSerializer = new BinaryFormatter(); binSerializer.Serialize(fileStram, obj); } } public static

从零开始编写属于我的CMS:(二)系统讲解

目录 1 系统管理 1.1 系统设置 1.2 路由设置 1.3 缓存管理 1.4 模板管理 2 系统用户 2.1 角色管理 2.2 管理员管理 3 站点管理 3.1 站点设置 3.2 频道管理 3.3 栏目管理 3.4 项目管理 4 内容管理 5 高级管理 5.1 内容回收 5.2 表单管理 5.3 插件管理(未实现) 正文 1.1 系统设置 主要用于设置系统相关信息,包括基本信息,前线设置,邮箱设置. 表结构 整个系统设置只是一个键值对的值,KEY:SysConfig VALUE:xml/js

C#编程总结(一)序列化

C#编程总结(一)序列化 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 几种序列化技术:      1)二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用.例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象.您可以将对象序列化到流.磁盘.内存和网络等等.远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象.      2)XML 序列化仅序列化公共属性和

Thrift搭建分布式微服务(一)

一.Thrift是什么? 关于Thrift的基本介绍,参看张善友的文章Trift简介. 二.为什么使用微服务? 在公司的高速发展过程中,随着业务的增长,子系统越来越多.各系统间又不同程度的在某些逻辑上出现重合的场景.为了高效率的开发,必然出现到重用这些逻辑的实现代码的情况,通常的做法是直接引用相关的DLL.各子系统分别是不同的团队完成开发,直接引用DLL可能导致潜在的命名空间重复问题,以及因为方法的使用场景不明确给方法调用造成混乱等问题.另一种解决方案,就是部署统一的接口,对底层数据库的访问以及