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);
}
c# 开发可替换的通用序列化库的更多相关文章
- [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库
转自 http://blog.csdn.net/jinglijun/article/details/8276089 通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac ...
- iOS开发--使用lipo命令制作模拟器与真机通用静态库
通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac和iPhone的CPU不同,才造成了这种情况. 为了模拟器与真机之间切换调试的方便,制作通用版本非常有必要. 现在有 ...
- iOS:iOS开发非常全的三方库、插件等等
iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...
- iOS开发 非常全的三方库、插件、大牛博客等等
UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableVie ...
- 毫无保留开源我写的:IOS Android Ipad 多点触摸通用js 库
毫无保留开源我写的:IOS Android Ipad 多点触摸通用js 库 在线演示地址: http://m.yunxunmi.com/ 支持 IOS Android Ipad 等不同操作系统的手持或 ...
- 基于memcached的单机轻量级通用缓存库minicached的实现
一.前言 之前拜读过淘宝子柳的<淘宝技术这十年>之大作,深知缓存技术在系统优化中起着一个举足轻重的作用.无论是文件系统静态文件,数据库的访问,乃至网络数据的请求,只要是与内存访问速度相差较 ...
- 开发常用的 Android 函数库
第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人员辛勤工作的成果,我们开发起来更轻松和快捷.目前存在成千上万的函数库,如何选择正 ...
- #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库
在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化.但是这种序 ...
- xcode 4 制作通用静态库
参考:http://blog.csdn.net/pjk1129/article/details/7255163 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者F ...
随机推荐
- Sturct类型装箱时会遇到的问题
Object在拆箱时会在栈空间生成一个临时变量.所以Struct在使用时尽量将内容都声明为readonly为好 [<Struct>] type Point= val mutable X:d ...
- SQL:exec sp_executesql 用法
--這種是無效的過程 declare @sql nvarchar(500), @where nvarchar(500),@i nvarchar(64),@p nvarchar(50),@id int ...
- Python爬虫《Python网络爬虫相关基础概念》
引入 之前在授课过程中,好多同学都问过我这样的一个问题:为什么要学习爬虫,学习爬虫能够为我们以后的发展带来那些好处?其实学习爬虫的原因和为我们以后发展带来的好处都是显而易见的,无论是从实际的应用还是从 ...
- CSS实现文本周围插入符号
CSS实现文本周围插入符号的方案 本文要讨论的是如何在文本的周围插入图标,怎么样控制它们之间的位置关系,通过HTML结构合理性与CSS属性的使用来比较不同方案所实现效果的优缺点. 常见设计稿要求 在文 ...
- ASP.NET中引用dll“找不到指定模块"的完美解决办法 z
DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息.DllImport属性应用于方法,要求最少要 ...
- 2.安装 Android SDK
安装Android SDK Android SDK(Software Development Kit,软件开发工具包)提供了 Android API 库和开发工具构建,测试和调试应用程序.简单来讲,A ...
- JS支持可变参数(任意多个)
<script type="text/javascript"> function abc(){ //js中有个变量arguments,可以访问所有传入的值 for(va ...
- June 09th 2017 Week 23rd Friday
The supreme happiness of life is the conviction that we are loved. 生活中最大的幸福就是,坚信有人爱着我们. One of my go ...
- Jerry的Fiori原创文章合集
我曾经于2014年10月到2016年5月工作于SAP CRM Fiori应用的开发团队, 我所在的团队负责下列这8个Fiori应用的维护和持续开发: My Opportunities My Tasks ...
- 使flex-direction: column的子元素height: 100%生效的办法
在flex-direction: column子元素里直接使用height:100%,height并不会被设置成100% <!DOCTYPE html> <html lang=&qu ...