• 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);
            }

  • 相关阅读:
    JS+CSS自动切换选项卡
    漂亮的透明css菜单 下拉效果
    HTML下的默认样式属性
    测测你是否近视!
    CDATA C#操作XML(无命名空间),添加/删除/编辑节点
    JS 键盘事件
    JS获取Cookie值
    解决windows7下不能以管理员身份安装msi的问题
    引用Interop.SQLDMO.dll后的注意事项。
    c#正则表达式用法大全
  • 原文地址:https://www.cnblogs.com/jinyu20180311/p/10312365.html
Copyright © 2020-2023  润新知