对象序列化

using System;
using System.Xml;
using System.Xml.Serialization;
using System.Text;
using System.IO;
public class Util
{
    /// <summary>
    /// 对象序列化成 XML String
    /// </summary>
    public static string XmlSerialize<T>(T obj)
    {
        string xmlString = string.Empty;
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
        using (MemoryStream ms = new MemoryStream())
        {
            xmlSerializer.Serialize(ms, obj);
            xmlString = Encoding.UTF8.GetString(ms.ToArray());
        }
        return xmlString;
    }

    /// <summary>
    /// XML String 反序列化成对象
    /// </summary>
    public static T XmlDeserialize<T>(string xmlString)
    {
        T t = default(T);
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
        using (Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))
        {
            using (XmlReader xmlReader = XmlReader.Create(xmlStream))
            {
                Object obj = xmlSerializer.Deserialize(xmlReader);
                t = (T)obj;
            }
        }
        return t;
    }
}

  

1.序列化为二进制流

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

namespace Common.Serialization.Byte {
    public class ByteSerializer {
        /// <summary>
        /// 对象转换为二进制流
        /// </summary>
        /// <param name="obj">要序列化的对象</param>
        /// <returns>对象序列化后的二进制流</returns>
        public static byte[] Serialize(object obj) {
            if (obj == null) {return null;}

            MemoryStream ms = new MemoryStream();
            try {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(ms, obj);
                return ms.ToArray();
            } finally {
                ms.Close();
            }
        }

        /// <summary>
        /// 二进制流转换为对象
        /// </summary>
        /// <param name="buffer">二进制流缓存</param>
        /// <returns>反序列化后的对象</returns>
        public static object Deserialize(byte[] buffer) {
            if ((buffer == null) || (buffer.Length == 0)) {
                return null;
            }

            MemoryStream ms = new MemoryStream(buffer);
            try {
                BinaryFormatter formatter = new BinaryFormatter();
                return formatter.Deserialize(ms);
            } finally {
                ms.Close();
            }
        }
    }
}

2.序列化为XML

using System;
using System.Text;
using System.IO;

namespace Common.Serialization.Xml {
    public class XmlSerialization {
        /// <summary>
        /// 对象转换为XML字符串
        /// </summary>
        /// <param name="obj">要序列化的对象</param>
        /// <returns>对象序列化后的XML字符串</returns>
        public static string Serialize(object obj) {
            if (obj == null) {
                return null;
            }

            MemoryStream ms = new MemoryStream();
            try {
                System.Xml.Serialization.XmlSerializer formatter = new System.Xml.Serialization.XmlSerializer(obj.GetType());
                formatter.Serialize(ms, obj);
                return Encoding.Default.GetString(ms.ToArray());
            } finally {
                ms.Close();
            }
        }

        /// <summary>
        /// XML字符串转换为对象
        /// </summary>
        /// <param name="xml">XML字符串</param>
        /// <param name="targetType">要反序列化为的对象类型</param>
        /// <returns>反序列化后的对象</returns>
        public static object Deserialize(string xml, Type targetType) {
            if ((xml == null) || (xml.Length == 0)) {
                return null;
            }

            MemoryStream ms = new MemoryStream(Encoding.Default.GetBytes(xml));
            try {
                System.Xml.Serialization.XmlSerializer formatter = new System.Xml.Serialization.XmlSerializer(targetType);
                return formatter.Deserialize(ms);
            } finally {
                ms.Close();
            }
        }
    }
}

3.序列化为JSON

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

namespace Common.Serialization.Json {
    public class JsonSerializer {
        /// <summary>
        /// 对象转换为JSON字符串
        /// </summary>
        /// <param name="obj">要序列化的对象</param>
        /// <returns>对象序列化后的JSON字符串</returns>
        public static string Serialize(object obj) {
            if (obj == null) {return null;}

            MemoryStream ms = new MemoryStream();
            try {
                DataContractJsonSerializer formatter = new DataContractJsonSerializer(obj.GetType());
                formatter.WriteObject(ms, obj);
                return Encoding.UTF8.GetString(ms.ToArray());
            } finally {
                ms.Close();
            }
        }

        /// <summary>
        /// JSON字符串转换为对象
        /// </summary>
        /// <param name="json">JSON字符串</param>
        /// <param name="targetType">要反序列化为的对象类型</param>
        /// <returns>反序列化后的对象</returns>
        public static object Deserialize(string json, Type targetType) {
            if ((json == null) || (json.Length == 0)) {return null;}

            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
            try {
                DataContractJsonSerializer formatter = new DataContractJsonSerializer(targetType);
                return formatter.ReadObject(ms); 
            } 
            finally 
            { ms.Close(); }
          } 
      } 
} 

  

posted on 2012-08-15 17:51  Daywei  阅读(255)  评论(0编辑  收藏  举报

导航

技术追求卓越 梦想创造未来