转载:
EmitMapper是一个开源实体映射框架,地址:。
EmitMapper映射效率比较高,接近硬编码。EmitMapper采用emit方式在运行时动态生成IL,而其他映射框架多是采用反射机制。此外EmitMapper最大限度地减少了拆箱装箱操作和映射过程中的额外的调用。
EmitMapper支持.net的所有平台:Framework 3.5、Microsoft Silverlight 3、Mono。
EmitMapper的使用非常简单,不需要指定任何的映射策略。系统会采用默认的映射配置器DefaultMapConfig完成映射操作。
//=>一、(默认映射配置器)属性名称一样的情况;类型可以不一样,但基元素类型转换可以进行ToString。(注意是属性名称是区分大小写) //=》写法一 //ObjectsMappermapper = //ObjectMapperManager.DefaultInstance.GetMapper (); //Dest dst = mapper.Map(src); //=》简写二 Dest dst = null; dst = ObjectMapperManager.DefaultInstance.GetMapper ().Map(src, dst); //=》二、自定义映射配置器 ObjectsMapper mapper1 = new ObjectMapperManager().GetMapper ( new DefaultMapConfig() .IgnoreMembers (new string[] { "A" }) .NullSubstitution ((value) => { return -1M; }) //如果不是语句块,则可以省略return;如果是加上return,则需要加上花括号 { return } //.NullSubstitution ((value) => -1M) .ConvertUsing (value => new Inner2 { D12 = value.D1, D22 = value.D2 }) //.ConvertUsing (value => { return new Inner2 { D12 = value.D1, D22 = value.D2 }; }) //=>方法体的写法 //.PostProcess ((value, state) => //{ // value.F = "nothing"; // value.A = 111; // return value; //}) //); //=>return的写法 //.PostProcess ((value, state) => //{ // return new Dest // { // F = "nothing", // A = 111, // }; //}) //.PostProcess ((value, state) => // new Dest // { // F = "noting", // A = 111, // }) //); .PostProcess ((Dest value, object state) => new Dest { F = "noting", A = 111, }) ); Dest dst1 = mapper1.Map(src); //=>其他 //=>委托写法 //EmitMapper.MappingConfiguration.MappingOperations.ValuesPostProcessor ValuesPostProcessor1 = delegate(Dest dest1, object state) { return new Dest { }; }; EmitMapper.MappingConfiguration.MappingOperations.ValuesPostProcessor ValuesPostProcessor2 = (d, s) => { return new Dest { }; };
EmitMapper的使用小结(很不错)
自己总结的Demo下载: