C# 二進位、Xml、Json序列化和還原序列化

來源:互聯網
上載者:User

標籤:xml   json   二進位   序列化   binaryformatter   

昨天利用業餘時間對比了下C#中三種序列化方式(二進位、Xml、Json),綜合來看json方式產生的位元組數組長度最短,但當你需要序列化的對象中包括byte[]類型,且其長度較長時,序列化後,xml方式的長度較json方式更短。xml方式中對byte[]做了base64轉換。

最後綜合三種情況,寫了一個基於泛型的通用類來完成序列化和還原序列化操作,僅供參考,若有什麼錯誤之處,還請指教。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Runtime.Serialization.Json;using System.Xml.Serialization;using System.Runtime.Serialization.Formatters.Binary;namespace Leaf.Lib.Data{    /// <summary>    /// 對象序列化/還原序列化    /// </summary>    public class Serialization    {        /// <summary>        /// 序列化類別型        /// </summary>        public enum SerializeType        {            Binary,            Json,            Xml        }        /// <summary>        /// 對象還原序列化        /// </summary>        /// <typeparam name="T">物件類型</typeparam>        /// <param name="aSerializeData">序列化位元組數組</param>        /// <param name="aType">序列化方式</param>        /// <returns></returns>        public static T Deserialize<T>(byte[] aSerializeData, SerializeType aType)        {            T obj = default(T); ;            if (aSerializeData != null && aSerializeData.Length > 0)            {                MemoryStream stream = new MemoryStream(aSerializeData);                switch (aType)                {                    case SerializeType.Binary:                        BinaryFormatter bf = new BinaryFormatter();                        obj = (T)bf.Deserialize(stream);                        break;                    case SerializeType.Json:                        DataContractJsonSerializer djs = new DataContractJsonSerializer(typeof(T));                        obj = (T)djs.ReadObject(stream);                        break;                    case SerializeType.Xml:                        XmlSerializer xs = new XmlSerializer(typeof(T));                        obj = (T)xs.Deserialize(stream);                        break;                }                stream.Close();            }            return obj;        }        /// <summary>        /// 對象序列化        /// </summary>        /// <typeparam name="T">物件類型</typeparam>        /// <param name="aData">需要序列化的對象</param>        /// <param name="aType">序列化方式</param>        /// <returns></returns>        public static byte[] Serialize<T>(T aData, SerializeType aType)        {            MemoryStream stream = new MemoryStream();            switch (aType)            {                case SerializeType.Binary:                    BinaryFormatter bf = new BinaryFormatter();                    bf.Serialize(stream, aData);                    break;                case SerializeType.Json:                    DataContractJsonSerializer djs = new DataContractJsonSerializer(typeof(T));                    djs.WriteObject(stream, aData);                    break;                case SerializeType.Xml:                    XmlSerializer xs = new XmlSerializer(typeof(T));                    xs.Serialize(stream, aData);                    break;            }            byte[] data = stream.ToArray();            stream.Close();            return data;        }    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.