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); }
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); }