Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 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();
 }