zoukankan      html  css  js  c++  java
  • 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);
            }

  • 相关阅读:
    oralce 10g(10.2.0.1) 冷备份从64位恢复到32位
    Java反序列化漏洞总结
    正则表达式优化总结
    机器学习笔记(持续更新)
    Java反序列化漏洞分析
    ThinkPHP5 远程命令执行漏洞分析
    Joomla对象注入漏洞分析
    crontab一句话后门分析
    WeCenter3.1.7 blind xxe 分析
    Redis Getshell总结
  • 原文地址:https://www.cnblogs.com/jinyu20180311/p/10312365.html
Copyright © 2011-2022 走看看