文档章节

C#序列化反序列化对象为base64字符串

梦想游戏人
 梦想游戏人
发布于 2017/08/02 11:02
字数 268
阅读 25
收藏 0

之所以序列化为base64 字符串 方便传输,可存储在本地 也可以是服务器

 

 public class Serializer
    {
        private Serializer() { }
        public static string Serialize<T>(T obj)
        {
            try
            {
                IFormatter formatter = new BinaryFormatter();
                MemoryStream stream = new MemoryStream();
                formatter.Serialize(stream, obj);
                stream.Position = 0;
                byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 0, buffer.Length);
                stream.Flush();
                stream.Close();
                return Convert.ToBase64String(buffer);
            }
            catch (Exception ex)
            {
                Debug.LogError(" Serialize error   " + ex.Message);
                return null;
            }
        }
        public static T Deserialize<T>(string str)
        {
            T obj = default(T);
            try
            {
                IFormatter formatter = new BinaryFormatter();
                byte[] buffer = Convert.FromBase64String(str);
                MemoryStream stream = new MemoryStream(buffer);
                obj = (T)formatter.Deserialize(stream);
                stream.Flush();
                stream.Close();
            }
            catch (Exception ex)
            {
                Debug.LogError(" Serialize error   " + ex.Message);
                return obj;
            }
            return obj;
        }
        //将一组array 对象 序列化为 基于base64的存储string
        public static string SerializeMulti<T>(IEnumerable objs)
        {
            string ser_str = "";
            foreach (T data in objs)
            {
                string str = Serialize<T>(data);
                ser_str += str + SPLIT_FLAG_BASE64;
            }
            return ser_str;
        }
        //从 字符串 反序列化出对象数组
        public static ArrayList DeserializeMulti<T>(string ser_str) where T : new()
        {
            ArrayList ret = new ArrayList();

            if (string.IsNullOrEmpty(ser_str))
            {
                return ret;
            }
            string[] strs = ser_str.Split(SPLIT_FLAG_BASE64);
            if (strs.Length <= 0) return ret;

            foreach (string s in strs)
            {
                if (string.IsNullOrEmpty(s)) continue;
                var obj = Deserialize<T>(s);
                ret.Add(obj);
            }
            return ret;
        }
        public const char SPLIT_FLAG_BASE64 = (char)111;//base64 生成的间隔标识符数值 只要不是base64 生成的char 都可以当做间隔符
    }

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 35
博文 435
码字总数 123998
作品 0
成都
私信 提问
PHP 序列化变量的 4 种方法

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。 1. s...

mickelfeng
2013/01/12
0
1
PHP多种序列化以及反序列化

PHP多种序列化以及反序列化 PHP点点通2016-09-2147 阅读 序列化PHP 序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个...

PHP点点通
2016/09/21
0
0
PHP多种序列化/反序列化的方法

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。 1. s...

cnu2m
2012/11/08
0
0
PHP多种序列化/反序列化的方法

serialize和unserialize函数 这两个是序列化和反序列化PHP中数据的常用函数。 当数组值包含如双引号、单引号或冒号等字符时,它们被反序列化后,可能会出现问题。为了克服这个问题,一个巧妙...

京牛教育科技
2016/08/27
9
2
C# xml和对象的序列化与反序列化

为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中;内存中的对象如果需要传递给其他系统使用;或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化。...

KavenSu
2014/02/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
9分钟前
0
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
10分钟前
0
0
要混乱还是要混蛋——《西欧中世纪》读后感2900字

要混乱还是要混蛋——《西欧中世纪》读后感2900字: 这本书读了多久?好像有一年了,我翻了之前做摘抄的记录,最早一条是今年年初写的。这本书有多少页? 580多页,还不算厚厚一叠欧洲皇室谱...

原创小博客
15分钟前
0
0
Confluence 6 文档主题合并问答

在 Confluence 官方 前期发布的消息 中,文档主题在 Confluence 6.0 及其后续版本中已经不可用。我们知道你可能对这个有很多好好奇的问题,因此我们在这里设置了一个问答用于帮助你将这个主题...

honeymose
44分钟前
2
0
java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部