Action <object, IDescriptorSerializerLiteContext> BuildNestedObjGatherer(ITypeDescriptor descriptor, Type type) { Action <object, IDescriptorSerializerLiteContext> res; if (type != null && type != typeof(object)) { if (_gathererCache.TryGetValue(type, out res)) { return(res); } } var gen = descriptor.BuildNewDescriptorGenerator(); if (gen == null) { res = (obj, ctx) => { }; } else { var method = ILBuilder.Instance.NewMethod <Action <object, IDescriptorSerializerLiteContext> >( "GatherAllObjectsForTypeExtraction_" + descriptor.Name); var il = method.Generator; gen.GenerateTypeIterator(il, ilgen => ilgen.Ldarg(0), ilgen => ilgen.Ldarg(1), type); il.Ret(); res = method.Create(); } if (type != null) { _gathererCache[type] = res; } return(res); }
Action <object, IDescriptorSerializerLiteContext> NewDescriptorSaverFactory(ITypeDescriptor descriptor) { var gen = descriptor.BuildNewDescriptorGenerator(); if (gen == null) { return(null); } var method = ILBuilder.Instance.NewMethod <Action <object, IDescriptorSerializerLiteContext> >("GatherAllObjectsForTypeExtraction_" + descriptor.Name); var il = method.Generator; gen.GenerateTypeIterator(il, ilgen => ilgen.Ldarg(0), ilgen => ilgen.Ldarg(1), _preciseType); il.Ret(); return(method.Create()); }
Action<object, IDescriptorSerializerLiteContext> BuildNestedObjGatherer(ITypeDescriptor descriptor, Type type) { Action<object, IDescriptorSerializerLiteContext> res; if (type != null) { if (_gathererCache.TryGetValue(type, out res)) return res; } var gen = descriptor.BuildNewDescriptorGenerator(); if (gen == null) { res = (obj, ctx) => { }; } else { var method = ILBuilder.Instance.NewMethod<Action<object, IDescriptorSerializerLiteContext>>("GatherAllObjectsForTypeExtraction_" + descriptor.Name); var il = method.Generator; gen.GenerateTypeIterator(il, ilgen => ilgen.Ldarg(0), ilgen => ilgen.Ldarg(1), type); il.Ret(); res = method.Create(); } if (type != null) _gathererCache[type] = res; return res; }
Action<object, IDescriptorSerializerLiteContext> NewDescriptorSaverFactory(ITypeDescriptor descriptor) { var gen = descriptor.BuildNewDescriptorGenerator(); if (gen == null) { return null; } var method = ILBuilder.Instance.NewMethod<Action<object, IDescriptorSerializerLiteContext>>("GatherAllObjectsForTypeExtraction_" + descriptor.Name); var il = method.Generator; gen.GenerateTypeIterator(il, ilgen => ilgen.Ldarg(0), ilgen => ilgen.Ldarg(1), null); il.Ret(); return method.Create(); }