文档章节

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

梦想游戏人
 梦想游戏人
发布于 2017/08/02 11:02
字数 268
阅读 20
收藏 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 都可以当做间隔符
    }

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 34
博文 420
码字总数 119565
作品 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#获取动态key的json对象的值

获取动态key的json对象的值 问题描述 如果直接获取某个json数组中的元素将得到如下的json 这个json对象如果使用C#类来反序列化,那么实体类的结构如下,实体类的类名需要与json对象key相同的...

冬天之雪
2016/10/20
77
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

谷歌 Fuchsia 上手体验,将取代Android/win10

在手机市场领域,Google表现很抢眼,毫无疑问,Android 至今在移动操作系统的市场份额占据绝对领先地位,但是 Android 仍然存在不少问题,碎片化问题严重,在平板以及大屏幕设备上表现糟糕,...

linux-tao
23分钟前
1
0
List、Array与ArrayList

数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如: string[] s=new string[3];//赋值 s[0]="a"; s[1]="b"; s[2]="c";//修改 s[1]="b1"; 但是数组...

shimmerkaiye
25分钟前
0
0
Linux 的Lnmp环境下为mysql添加环境变量

一.问题 在Linux 安装完Lnmp 环境后 , 连接Mysql 告诉没有这条命令 mysql -uroot -p 命令失效 因为是源码安装的,所以会出现这样的的原因 。集成环境是不会出现的。 其实很简单,只需要给m...

15834278076
27分钟前
3
0
apolloxlua include函数

include函数不是单独使用的函数, 他并不是标准库的一部分, 你可以使用include函数将某个后缀为 .aop的文档包含到你的文档流中。 因为include是单独处理流, 所以不会在主处理流程中有所表示...

钟元OSS
31分钟前
0
0
【转载分享】做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱...

HellerZhang
33分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部