fastCSharp数据类快速序列化代码生成实例发布

showjim 2012-12-17 01:02:45
数据类型支持
1、硬编码支持基本数据类型,比如bool,byte,sbyte,short,ushort,int,uint,long,ulong,char,DateTime,float,double,decimal,Guid,string,enum:int。包括可空类型(比如int?)以及数组(比如int[]、int?[])。
硬编码的运行效率最高,也是最常用的。
2、序列化支持循环引用、嵌套类、泛型集合、KeyValuePair。对于基本数据类型的泛型成员使用静态哈希查表+委托方式,运行效率低于硬编码支持。
哈希表的运行效率低于硬编码,一般应用于泛型成员的序列化。当然泛型类实例可以定义一个空壳子类转化为硬编码模式,代价是开发效率与通用性。
3、支持自定义序列化接口,对于没有提供自定义接口的非基本类型序列化使用.NET自带的BinaryFormatter序列化,这种方式的运行效率最低。
对于这个支持,个人实际应用中从未使用过,相当于一个预留的扩展方案。

简单的使用方法参考fastCSharp.keyValue,就是在partial类定义上添加自定义属性(配置)
        [fastCSharp.setup.cSharp.serialize]

这是一个默认配置,处理公共动态字段。
        /// <summary>
/// 成员选择类型
/// </summary>
public memberFilter Filter = memberFilter.PublicInstance;
/// <summary>
/// 默认是否仅限与字段(忽略属性)
/// </summary>
public bool IsOnlyFiled = true;
/// <summary>
/// 成员是否匹配自定义属性类型
/// </summary>
public bool IsAttribute;
/// <summary>
/// 成员匹配自定义属性是否可继承
/// </summary>
public bool IsInheritAttribute = true;
/// <summary>
/// 序列化版本号(不能小于0)
/// </summary>
public int Version;
/// <summary>
/// 未知类型转换接口,必须继承fastCSharp.setup.cSharp.serialize.IUnknownSerialize
/// </summary>
public Type UnknownSerialize;

当然你也可以所有动态字段,包括私有字段,比如
        [fastCSharp.setup.cSharp.serialize(Filter = fastCSharp.setup.memberFilter.Instance)]

项目编译以后,会在“[项目名称].fastCSharp.cs”中生成fastCSharp.setup.cSharp.serialize.ISerialize接口实现代码。
如果你还没有使用过fastCSharp,那么需要在“项目属性->生成事件->后期生成事件命令行”中加入生成代码调用,比如
if exist d:\fastCSharp\bin\Release\fastCSharp.exe d:\fastCSharp\bin\Release\fastCSharp.exe $(ProjectName) $(ProjectDir) $(TargetPath) $(TargetName)
注意,生成代码的fastCSharp.exe最好选择高版本的.NET编译(因为低版本的程序集不能读取高版本的程序集元数据信息),与项目实际引用的.NET版本可以不同。

如果某字段不需要序列化,可以在字段定义上添加
        [fastCSharp.setup.cSharp.serialize(IsIgnoreCurrent = true)]

或者
        [fastCSharp.setup.cSharp.serialize(IsIgnore = true)]

注意,IsIgnoreCurrent仅仅忽略序列化应用,而IsIgnore将忽略所用fastCSharp应用,一般不建议使用。比如下面的定义也能忽略序列化应用
        [fastCSharp.setup.cSharp.ajax(IsIgnore = true)]


fastCSharp序列化不仅仅支持类定义配置,使用的时候还可以通过成员位图来选择具体成员。
每一个与成员相关的应用都会生成相关的成员位图,比如keyValue<keyType, valueType>.memberMap,继承自fastCSharp.setup.cSharp.IMemberMap。
fastCSharp.setup.cSharp.serialize.ISerialize中有与fastCSharp.setup.cSharp.IMemberMap有相关重载函数。

(fastCSharp part 1.3下载)还包括一个json序列化的代码生成实例,使用方法与serialize类似。
...全文
384 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
灵雨飘零 2013-03-29
  • 打赏
  • 举报
回复
支持下支持下
事理 2012-12-17
  • 打赏
  • 举报
回复
谢谢分享,支持下
kunkun0921 2012-12-17
  • 打赏
  • 举报
回复
mark ,沙发!!!

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧