Exemple #1
0
        static Action <TextWriter, ForType, int> _GetSemiStaticInlineSerializerFor <ForType>(Options opts)
        {
            var type = typeof(ForType);

            var key = Tuple.Create(typeof(ForType), opts);

            var ret = (Action <TextWriter, ForType, int>)GetSemiStaticInlineSerializerForCache[key];

            if (ret != null)
            {
                return(ret);
            }

            var cacheType = OptionsLookup.GetTypeCacheFor(opts);
            var builder   = InlineSerializerHelper.BuildWithDynamism.MakeGenericMethod(type);

            lock (GetSemiStaticInlineSerializerForCache)
            {
                ret = (Action <TextWriter, ForType, int>)GetSemiStaticInlineSerializerForCache[key];
                if (ret != null)
                {
                    return(ret);
                }
                GetSemiStaticInlineSerializerForCache[key] = ret = (Action <TextWriter, ForType, int>)builder.Invoke(null, new object[] { cacheType, opts.ShouldPrettyPrint, opts.ShouldExcludeNulls, opts.IsJSONP, opts.UseDateTimeFormat, opts.ShouldIncludeInherited });
            }

            return(ret);
        }
Exemple #2
0
        static Action <TextWriter, ForType, int> _GetSemiStaticInlineSerializerFor <ForType>(MemberInfo dynamicMember, Options opts)
        {
            var type = typeof(ForType);

            Type treatEnumerationAs = null;

            if (dynamicMember != null)
            {
                var attr = dynamicMember.GetCustomAttribute <JilDirectiveAttribute>();
                if (attr != null && attr.TreatEnumerationAs != null)
                {
                    treatEnumerationAs = attr.TreatEnumerationAs;
                }
            }

            var key = Tuple.Create(treatEnumerationAs, typeof(ForType), opts);

            var ret = (Action <TextWriter, ForType, int>)GetSemiStaticInlineSerializerForCache[key];

            if (ret != null)
            {
                return(ret);
            }

            var cacheType = OptionsLookup.GetTypeCacheFor(opts);
            var builder   = InlineSerializerHelper.BuildWithDynamism.MakeGenericMethod(type);

            lock (GetSemiStaticInlineSerializerForCache)
            {
                ret = (Action <TextWriter, ForType, int>)GetSemiStaticInlineSerializerForCache[key];
                if (ret != null)
                {
                    return(ret);
                }

                GetSemiStaticInlineSerializerForCache[key] = ret = (Action <TextWriter, ForType, int>)builder.Invoke(null, new object[] { dynamicMember, cacheType, opts.ShouldPrettyPrint, opts.ShouldExcludeNulls, opts.IsJSONP, opts.UseDateTimeFormat, opts.ShouldIncludeInherited, opts.UseUnspecifiedDateTimeKindBehavior, opts.SerializationNameFormat });
            }

            return(ret);
        }