c# - Serialize and Deserialize, 序列化 反序列化 泛型

using Newtonsoft.Json;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;

namespace Cano.ToolSet
{
    public class Serializer
    {
        #region 序列化,反序列化 - Byte[]

        public static byte[] SerializeBytes<T>(T obj)
        {
            MemoryStream stream = new MemoryStream();
            IFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, obj);
            return stream.ToArray();
        }

        public static T DeSerializeBytes<T>(byte[] bytes)
        {
            MemoryStream stream = new MemoryStream(bytes);
            IFormatter formatter = new BinaryFormatter();
            stream.Seek(0, SeekOrigin.Begin);
            T o = (T)formatter.Deserialize(stream);
            return o;
        }

        #endregion

        #region 序列化,反序列化 - MemoryStream

        public static MemoryStream SerializeStream<T>(T obj)
        {
            MemoryStream stream = new MemoryStream();
            IFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, obj);
            return stream;
        }

        public static T DeSerializeStream<T>(MemoryStream stream)
        {
            IFormatter formatter = new BinaryFormatter();
            stream.Seek(0, SeekOrigin.Begin);
            T o = (T)formatter.Deserialize(stream);
            return o;
        }

        public static T DeSerializeStreamFile<T>(string memFile)
        {
            MemoryStream stream = ReadFileToMemoryStream(memFile);
            return DeSerializeStream<T>(stream);
        }

        public static void SerializeStreamFile<T>(T obj, string memFile)
        {
            MemoryStream stream = SerializeStream<T>(obj);
            WriteMemoryStreamToFile(stream, memFile);
        }

        private static void WriteMemoryStreamToFile(MemoryStream stream, string file)
        {
            using (FileStream fs = new FileStream(file, FileMode.Create, System.IO.FileAccess.Write))
            {
                stream.WriteTo(fs);
            }
        }

        private static MemoryStream ReadFileToMemoryStream(string file)
        {
            using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
            {
                byte[] bytes = new byte[fs.Length];
                fs.Read(bytes, 0, (int)fs.Length);
                MemoryStream ms = new MemoryStream(bytes);
                return ms;
            }
        }

        #endregion

        #region 序列化,反序列化 - Xml File

        public static void SerializeXMLFile<T>(T obj, string xmlpath)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            using (StreamWriter writer = new StreamWriter(xmlpath))
            {
                serializer.Serialize(writer, obj);
                writer.Close();
            }
        }

        public static T DeserializeXMLFile<T>(string xmlPath)
        {
            XmlSerializer deserializer = new XmlSerializer(typeof(T));
            using (StreamReader reader = new StreamReader(xmlPath))
            {
                T obj = (T)deserializer.Deserialize(reader);
                reader.Close();
                return obj;
            }
        }

        #endregion

        #region 序列化,反序列化 - XML String

        public static string SerializeXML<T>(T obj)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            string content = string.Empty;
            using (StringWriter writer = new StringWriter())
            {
                serializer.Serialize(writer, obj);
                content = writer.ToString();
            }
            return content;
        }

        public static T DeserializeXML<T>(string content)
        {
            XmlSerializer deserializer = new XmlSerializer(typeof(T));
            using (StringReader reader = new StringReader(content))
            {
                T obj = (T)deserializer.Deserialize(reader);
                reader.Close();
                return obj;
            }
        }

        #endregion

        #region 序列化,反序列化 - Json String

        public static string SerializeJSON<T>(T obj)
        {
            return JsonConvert.SerializeObject(obj);
        }

        public static T DeserializeJSON<T>(string content)
        {
            return JsonConvert.DeserializeObject<T>(content);
        }

        #endregion
    }
}

---------------------

本文来自 yuxuac 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yuxuac/article/details/16830589?utm_source=copy 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值