c# 开发可替换的通用序列化库

开篇继续吹牛。。。。

其实没有什么可吹的了,哈哈哈哈哈

主要是写一个通用库,既可以直接用,又方便替换,我的序列化都是采用第三方的哈。

我不上完整代码了,只是给大家讲讲过程。

1.写一个序列化的类,我是使用前面给大家介绍的messagepack哈。一个静态类,这个随自己需要。

2.写另一个封装类CommonSerializer,相当于一个模板,里面所有序列化,反序列化方法都是虚方法,调用前面的messagepack方法,最后方法名称都一样。

3.再写一个对外的序列化泛型类SerializerFactory。里面的方法和上面的CommonSerializer一样,最好名称也一致。

这里: SerializerFactory<TSerializer> where TSerializer: CommonSerializer

这样的定义大家是不是明白了呢,

在你自己的项目中,

 SerializerFactory<CommonSerializer>.方法:使用默认的序列化

当你要替换其中的方法或者组件时。

写一个myclass类继承CommonSerializer,覆盖方法即可。

SerializerFactory<myclass>.方法

SerializerFactory类里面部分代码需要

 private static Dictionary<string, CommonSerializer> dic_Serializer = new Dictionary<string, CommonSerializer>();
        
        //采用属性方式,不使用方法,更加舒服
        private static CommonSerializer SerializerCls
        {
            get
            {
                //不考虑锁,替换对象而已,也没有遍历
                Type serializerType = typeof(TSerializer);
                CommonSerializer serializer = null;
                if (dic_Serializer.TryGetValue(serializerType.FullName, out serializer))
                {
                    return serializer;
                }
                else
                {
                    serializer = Activator.CreateInstance<TSerializer>();
                    dic_Serializer[serializerType.FullName] = serializer;
                    return serializer;
                }
            }
        }

这样你可以使用不同的序列化组件在同一个库中。

比如一个序列化方法中

 /// <summary>
        /// 序列化二进制
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static byte[] Serializer<T>(T obj)
        {
            return SerializerCls.Serializer<T>(obj);
        }

 

 

posted @ 2018-10-12 14:58  IT苦行僧  阅读(585)  评论(0编辑  收藏  举报