对象序列化 与反序列化

来源:互联网 发布:python初学者看什么书 编辑:程序博客网 时间:2024/04/20 00:23

1.序列化为二进制流

View Code?
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespaceCommon.Serialization.Byte {
    publicclass ByteSerializer {
        /// <summary>
        /// 对象转换为二进制流
        /// </summary>
        /// <param name="obj">要序列化的对象</param>
        /// <returns>对象序列化后的二进制流</returns>
        public staticbyte[] Serialize(objectobj) {
            if (obj == null) {returnnull;}
            MemoryStream ms = newMemoryStream();
            try {
               BinaryFormatter formatter = newBinaryFormatter();
               formatter.Serialize(ms, obj);
               return ms.ToArray();
            } finally {
               ms.Close();
            }
        }
        /// <summary>
        /// 二进制流转换为对象
        /// </summary>
        /// <param name="buffer">二进制流缓存</param>
        /// <returns>反序列化后的对象</returns>
        public staticobject Deserialize(byte[] buffer) {
            if ((buffer == null) || (buffer.Length == 0)) {
               return null;
            }
            MemoryStream ms = newMemoryStream(buffer);
            try {
               BinaryFormatter formatter = newBinaryFormatter();
               return formatter.Deserialize(ms);
            } finally {
               ms.Close();
            }
        }
    }
}

2.序列化为XML

View Code?
using System;
using System.Text;
using System.IO;
namespaceCommon.Serialization.Xml {
    publicclass XmlSerialization {
        /// <summary>
        /// 对象转换为XML字符串
        /// </summary>
        /// <param name="obj">要序列化的对象</param>
        /// <returns>对象序列化后的XML字符串</returns>
        public staticstring Serialize(objectobj) {
            if (obj == null) {
               return null;
            }
            MemoryStream ms = newMemoryStream();
            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 staticobject Deserialize(stringxml, Type targetType) {
            if ((xml == null) || (xml.Length == 0)) {
               return null;
            }
            MemoryStream ms = newMemoryStream(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;
namespaceCommon.Serialization.Json {
    publicclass JsonSerializer {
        /// <summary>
        /// 对象转换为JSON字符串
        /// </summary>
        /// <param name="obj">要序列化的对象</param>
        /// <returns>对象序列化后的JSON字符串</returns>
        public staticstring Serialize(objectobj) {
            if (obj == null) {returnnull;}
            MemoryStream ms = newMemoryStream();
            try {
               DataContractJsonSerializer formatter = newDataContractJsonSerializer(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 staticobject Deserialize(stringjson, Type targetType) {
            if ((json == null) || (json.Length == 0)) {returnnull;}
            MemoryStream ms = newMemoryStream(Encoding.UTF8.GetBytes(json));
            try {
               DataContractJsonSerializer formatter = newDataContractJsonSerializer(targetType);
               return formatter.ReadObject(ms);
            } finally {
               ms.Close();
            }
        }
    }
}
原创粉丝点击