示例#1
0
        public static void ConfigureJsonSettings(
            this IMvcBuilder mvc,
            IServiceCollection services,
            JsonSerializerEnum jsonSerializerMode,
            string timezoneHeaderName,
            TimeZoneInfo defaultTimeZone)
        {
            CaseUtility.JsonSerializerMode = jsonSerializerMode;

            JsonSerializerSettings jsonSerializerSettings = null;

            Newtonsoft.Json.JsonSerializer jsonSerializer = null;

            switch (jsonSerializerMode)
            {
            case JsonSerializerEnum.Camelcase:
                jsonSerializer         = JsonUtility.CamelCaseJsonSerializer;
                jsonSerializerSettings = JsonUtility.CamelCaseJsonSerializerSettings;
                break;

            case JsonSerializerEnum.Lowercase:
                jsonSerializer         = JsonUtility.LowerCaseJsonSerializer;
                jsonSerializerSettings = JsonUtility.LowerCaseJsonSerializerSettings;
                break;

            case JsonSerializerEnum.Snakecase:
                jsonSerializer         = JsonUtility.SnakeCaseJsonSerializer;
                jsonSerializerSettings = JsonUtility.SnakeCaseJsonSerializerSettings;
                break;

            default:
                break;
            }

            jsonSerializer.Converters.Clear();
            jsonSerializer.Converters.Add(new EnumWithContractJsonConverter());
            jsonSerializerSettings.Converters.Clear();
            jsonSerializerSettings.Converters.Add(new EnumWithContractJsonConverter());

            JsonConvert.DefaultSettings = () => jsonSerializerSettings;

            services.AddScoped((provider) => jsonSerializer);
            services.AddScoped((provider) => jsonSerializerSettings);

            DateTimeConverter.DefaultTimeZone = defaultTimeZone;
            mvc.AddJsonOptions(options => {
                options.SerializerSettings.ContractResolver  = jsonSerializerSettings.ContractResolver;
                options.SerializerSettings.Converters        = jsonSerializerSettings.Converters;
                options.SerializerSettings.NullValueHandling = jsonSerializerSettings.NullValueHandling;
                options.SerializerSettings.Converters.Add(new DateTimeConverter(() => {
                    var httpContextAccessor = services.BuildServiceProvider().GetService <IHttpContextAccessor>();
                    return(DateTimeConverter.GetTimeZoneByAspNetHeader(httpContextAccessor, timezoneHeaderName));
                }));
            });
        }
        public static void ConfigureJsonSettings(
            this IMvcBuilder mvc,
            IServiceCollection services,
            JsonSerializerEnum jsonSerializerMode,
            string timezoneHeaderName,
            TimeZoneInfo defaultTimeZone)
        {
            CaseUtility.JsonSerializerMode = jsonSerializerMode;

            JsonSerializerSettings = null;
            JsonSerializer         = null;

            EnumWithContractJsonConverter.IgnoreEnumCase = Api.ApiSettings.UseOriginalEnumValue;

            switch (jsonSerializerMode)
            {
            case JsonSerializerEnum.Camelcase:
                JsonSerializer         = JsonUtility.CamelCaseJsonSerializer;
                JsonSerializerSettings = JsonUtility.CamelCaseJsonSerializerSettings;
                break;

            case JsonSerializerEnum.Lowercase:
                JsonSerializer         = JsonUtility.LowerCaseJsonSerializer;
                JsonSerializerSettings = JsonUtility.LowerCaseJsonSerializerSettings;
                break;

            case JsonSerializerEnum.Snakecase:
                JsonSerializer         = JsonUtility.SnakeCaseJsonSerializer;
                JsonSerializerSettings = JsonUtility.SnakeCaseJsonSerializerSettings;
                break;

            default:
                break;
            }

            // for fluent validation in cqrs extensions
            PropertyName.Resolver = (propertyName) =>
            {
                var parts = propertyName.Split('.');
                return(string.Join(".", parts.Select(r => r.ToCase(jsonSerializerMode.ToString()))));
            };

            JsonConvert.DefaultSettings = () => JsonSerializerSettings;

            services.AddScoped((provider) => JsonSerializer);
            services.AddScoped((provider) => JsonSerializerSettings);

            DateTimeConverter.DefaultTimeZone = defaultTimeZone;
            mvc.AddNewtonsoftJson(options =>
            {
                options.SerializerSettings.ContractResolver  = JsonSerializerSettings.ContractResolver;
                options.SerializerSettings.NullValueHandling = JsonSerializerSettings.NullValueHandling;
                options.SerializerSettings.Converters.Add(new DateTimeConverter(() =>
                {
                    var httpContextAccessor = services.BuildServiceProvider().GetService <IHttpContextAccessor>();
                    return(DateTimeConverter.GetTimeZoneByAspNetHeader(httpContextAccessor, timezoneHeaderName));
                }));
                foreach (var converter in JsonSerializerSettings.Converters)
                {
                    options.SerializerSettings.Converters.Add(converter);
                }
            });
        }
示例#3
0
 public static void AddQueryFormatter(this MvcOptions mvcOptions, JsonSerializerEnum jsonSerializer)
 {
     CaseQueryValueProvider.JsonSerializerMode = jsonSerializer;
     mvcOptions.ValueProviderFactories.Add(new CaseQueryValueProviderFactory());
 }
示例#4
0
 public static void AddPathFormatter(this MvcOptions mvcOptions, JsonSerializerEnum jsonSerializer)
 {
     PathValueProvider.JsonSerializerMode = jsonSerializer;
     mvcOptions.ValueProviderFactories.Add(new PathValueProviderFactory());
 }