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