Пример #1
0
        public void Test()
        {
            var namingStrategy = new SnakeCaseNamingStrategy();
            var settings       = new JsonSerializerSettings
            {
                ContractResolver = new DefaultContractResolver {
                    NamingStrategy = namingStrategy
                }
            };

            string    json = @"{""dict"":{""value1"":""a"",""text_value"":""b""}}";
            DataClass c    = JsonConvert.DeserializeObject <DataClass>(json, settings);

            Assert.AreEqual(2, c.Dict.Count);
            Assert.AreEqual("a", c.Dict[MyEnum.Value1]);
            Assert.AreEqual("b", c.Dict[MyEnum.TextValue]);

            string    json1 = @"{""dict"":{""Value1"":""a"",""TextValue"":""b""}}";
            DataClass c1    = JsonConvert.DeserializeObject <DataClass>(json1, settings);

            Assert.AreEqual(2, c1.Dict.Count);
            Assert.AreEqual("a", c1.Dict[MyEnum.Value1]);
            Assert.AreEqual("b", c1.Dict[MyEnum.TextValue]);

            // Non-dictionary values should still error
            ExceptionAssert.Throws <JsonSerializationException>(
                () =>
            {
                JsonConvert.DeserializeObject <List <MyEnum> >(@"[""text_value""]", settings);
            },
                @"Error converting value ""text_value"" to type 'Newtonsoft.Json.Tests.Issues.Issue2444+MyEnum'. Path '[0]', line 1, position 13."
                );
        }
        /// <summary>
        /// Returns a specialized instance of the <see cref="T:System.Net.Http.Formatting.MediaTypeFormatter"/> that can format a response for the given parameters.
        /// </summary>
        /// <param name="type">The type to format.</param>
        /// <param name="request">The request.</param>
        /// <param name="mediaType">The media type.</param>
        /// <returns>Returns <see cref="T:System.Net.Http.Formatting.MediaTypeFormatter"/>.</returns>
        public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, HttpRequestMessage request, MediaTypeHeaderValue mediaType)
        {
            var parameters = request.RequestUri.ParseQueryString();

            var prettify = false;

            if (parameters[PrettifyParameterName] != null)
            {
                prettify = new[] { "yes", "1", "true" }.Contains(parameters[PrettifyParameterName], StringComparer.OrdinalIgnoreCase);
            }

            var fieldNamingStratgey = _fieldNamingStratgey;

            if (parameters[FieldNamingStrategyParameterName] != null)
            {
                switch (parameters[FieldNamingStrategyParameterName])
                {
                case "none":
                    fieldNamingStratgey = new DefaultFieldNamingStrategy();
                    break;

                case "dash":
                    fieldNamingStratgey = new DasherizedFieldNamingStrategy();
                    break;

                case "snake":
                    fieldNamingStratgey = new SnakeCaseNamingStrategy();
                    break;
                }
            }

            return(new JsonApiMediaTypeFormatter(ContractResolver, fieldNamingStratgey, prettify));
        }
Пример #3
0
 public SnakeCaseNamingContractResolver()
 {
     // 使用下划线命名方式
     NamingStrategy = new SnakeCaseNamingStrategy {
         ProcessDictionaryKeys = true
     };
 }
Пример #4
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "AppointmentScheduler.Api v1"));
            }

            var snakeCaseNamingStrategy = new SnakeCaseNamingStrategy();
            var jsonSerializerSettings  = new JsonSerializerSettings
            {
                ContractResolver = new DefaultContractResolver
                {
                    NamingStrategy = snakeCaseNamingStrategy,
                },
            };

            jsonSerializerSettings.Converters.Add(new StringEnumConverter
            {
                NamingStrategy = snakeCaseNamingStrategy,
            });

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapHealthChecks("/");
                endpoints.MapControllers();
            });
        }
Пример #5
0
        public JsonDeserializer(NamingConvention namingConvention = NamingConvention.CamelHump)
        {
            _jsonSettings = new JsonSerializerSettings();

            NamingStrategy selectedNamingStrategy;

            switch (namingConvention)
            {
            case NamingConvention.CamelHump:
                selectedNamingStrategy = new CamelCaseNamingStrategy(true, false);
                break;

            case NamingConvention.SnakeCase:
                selectedNamingStrategy = new SnakeCaseNamingStrategy(true, false);
                break;

            default:
                selectedNamingStrategy = new DefaultNamingStrategy();
                break;
            }

            _jsonSettings.ContractResolver = new PrivateSetterContractResolver
            {
                NamingStrategy = selectedNamingStrategy
            };
        }
        public static NewtonsoftJsonSerializer Create(JsonNamingStrategy namingStrategy)
        {
            Newtonsoft.Json.Serialization.NamingStrategy chosenStrategy;
            switch (namingStrategy)
            {
            case JsonNamingStrategy.Default:
                chosenStrategy = new DefaultNamingStrategy();
                break;

            case JsonNamingStrategy.CamelCase:
                chosenStrategy = new CamelCaseNamingStrategy();
                break;

            case JsonNamingStrategy.SnakeCase:
                chosenStrategy = new SnakeCaseNamingStrategy();
                break;

            default:
                throw new ArgumentOutOfRangeException(
                          $"Unhandled JsonNamingStrategy: {namingStrategy}");
            }

            return(new NewtonsoftJsonSerializer(new Newtonsoft.Json.JsonSerializer()
            {
                NullValueHandling = NullValueHandling.Ignore,
                Formatting = Formatting.None,
                ContractResolver = new DefaultContractResolver()
                {
                    NamingStrategy = chosenStrategy
                }
            }));
        }
Пример #7
0
        public void DifferentStrategyEquality()
        {
            NamingStrategy s1 = new SnakeCaseNamingStrategy();
            NamingStrategy s2 = new DefaultNamingStrategy();

            Assert.IsFalse(s1.Equals(s2));
            Assert.IsFalse(s1.GetHashCode() == s2.GetHashCode());
        }
Пример #8
0
        public void SnakeCaseStrategyEquality()
        {
            var s1 = new SnakeCaseNamingStrategy();
            var s2 = new SnakeCaseNamingStrategy();

            Assert.IsTrue(s1.Equals(s2));
            Assert.IsTrue(s1.GetHashCode() == s2.GetHashCode());
        }
Пример #9
0
        private static JsonSerializerSettings GetSerializationSettings(
            SerializationType?serializationType,
            bool referenceLoopIgnore = false)
        {
            JsonSerializerSettings serializerSettings = (JsonSerializerSettings)null;

            if (serializationType.HasValue)
            {
                NamingStrategy namingStrategy1;
                if (serializationType.HasValue)
                {
                    switch (serializationType.GetValueOrDefault())
                    {
                    case SerializationType.CamelCase:
                        CamelCaseNamingStrategy caseNamingStrategy1 = new CamelCaseNamingStrategy();
                        caseNamingStrategy1.OverrideSpecifiedNames = false;
                        caseNamingStrategy1.ProcessDictionaryKeys  = true;
                        namingStrategy1 = (NamingStrategy)caseNamingStrategy1;
                        goto label_6;

                    case SerializationType.SnakeCase:
                        SnakeCaseNamingStrategy caseNamingStrategy2 = new SnakeCaseNamingStrategy();
                        caseNamingStrategy2.OverrideSpecifiedNames = false;
                        caseNamingStrategy2.ProcessDictionaryKeys  = true;
                        namingStrategy1 = (NamingStrategy)caseNamingStrategy2;
                        goto label_6;
                    }
                }
                CamelCaseNamingStrategy caseNamingStrategy3 = new CamelCaseNamingStrategy();
                caseNamingStrategy3.OverrideSpecifiedNames = false;
                caseNamingStrategy3.ProcessDictionaryKeys  = true;
                namingStrategy1 = (NamingStrategy)caseNamingStrategy3;
label_6:
                NamingStrategy namingStrategy2 = namingStrategy1;
                serializerSettings             = new JsonSerializerSettings()
                {
                    ContractResolver = (IContractResolver) new DefaultContractResolver()
                    {
                        NamingStrategy = namingStrategy2
                    }
                };
            }
            if (!referenceLoopIgnore)
            {
                return(serializerSettings);
            }
            if (serializerSettings == null)
            {
                serializerSettings = new JsonSerializerSettings();
            }
            serializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            return(serializerSettings);
        }
Пример #10
0
        public void GetClassStructure_With_Generic_Should_Return_Json()
        {
            // arrange
            var expectedJson = "{\"car_type1\":\"CarType\",\"car_type2\":\"CarType?\",\"name\":\"string\",\"name_initial\":\"char\",\"name_initial2\":\"char?\",\"id\":\"Guid\",\"age\":\"int\",\"age2\":\"int?\",\"weight\":\"double\",\"weight2\":\"double?\",\"boole\":\"boolean\",\"boole2\":\"boolean?\",\"longg\":\"long\",\"longg2\":\"long?\",\"decimall\":\"Decimal\",\"decimall2\":\"Decimal?\",\"floatt\":\"single\",\"floatt2\":\"single?\",\"bytee\":\"byte\",\"bytee2\":\"byte?\",\"s_bytee\":\"sbyte\",\"s_bytee2\":\"sbyte?\",\"short\":\"short\",\"short2\":\"short?\",\"u_short\":\"ushort\",\"u_short2\":\"ushort?\",\"u_intt\":\"uint\",\"u_intt2\":\"uint?\",\"u_longg\":\"ulong\",\"u_longg2\":\"ulong?\",\"created_at\":\"DateTime\",\"created_at_nullable\":\"DateTime?\",\"date_time_offsettt\":\"DateTimeOffset\",\"date_time_offsetttt\":\"DateTimeOffset?\",\"time_spantt\":\"TimeSpan\",\"time_spanrrr\":\"TimeSpan?\",\"test_structs\":{\"prop1\":\"string\",\"prop2\":\"int\"},\"test_structss\":{\"prop1\":\"string\",\"prop2\":\"int\"},\"car2\":{\"car_type1\":\"CarType\",\"car_type2\":\"CarType?\",\"name\":\"string\"},\"queisso_getne\":{\"prop1\":{\"car_type1\":\"CarType\",\"car_type2\":\"CarType?\",\"name\":\"string\"},\"prop2\":\"DateTime?\",\"prop3\":\"CarType\"}}";
            var strategy     = new SnakeCaseNamingStrategy();

            // act
            var json = ClassStructureSerializeExtensions.GetClassStructure <Car>(strategy, Formatting.None);

            // assert
            Assert.Equal(expectedJson, json);
        }
        static void BadExample(object obj)
        {
            var snakeNameStrategy = new SnakeCaseNamingStrategy();
            var jsonSnakeSettings = new JsonSerializerSettings {
                Formatting       = Formatting.Indented,
                ContractResolver = new DefaultContractResolver {
                    NamingStrategy = snakeNameStrategy
                },
            };

            var json = JsonConvert.SerializeObject(obj, jsonSnakeSettings);

            Console.WriteLine(json);
        }
        public static string ToJson(this TransportEvent transportEvent)
        {
            var naming   = new SnakeCaseNamingStrategy();
            var resolver = new DefaultContractResolver {
                NamingStrategy = naming
            };
            var settings = new JsonSerializerSettings
            {
                Converters        = new JsonConverter[] { new StringEnumConverter() },
                ContractResolver  = resolver,
                NullValueHandling = NullValueHandling.Ignore
            };

            return(JsonConvert.SerializeObject(transportEvent, settings));
        }
Пример #13
0
 private void SetNamingStrategy(Casing casing)
 {
     if (casing == Casing.CamelCase)
     {
         NamingStrategy = new CamelCaseNamingStrategy {
             ProcessDictionaryKeys = true, OverrideSpecifiedNames = true
         };
     }
     else if (casing == Casing.SnakeCase)
     {
         NamingStrategy = new SnakeCaseNamingStrategy {
             ProcessDictionaryKeys = true, OverrideSpecifiedNames = true
         };
     }
     ;
 }
Пример #14
0
        public static string ToJson(this object obj)
        {
            DefaultContractResolver contractResolver = new()
            {
                NamingStrategy = new SnakeCaseNamingStrategy()
            };

            var settings = new JsonSerializerSettings()
            {
                ContractResolver     = contractResolver,
                NullValueHandling    = NullValueHandling.Ignore,
                DefaultValueHandling = DefaultValueHandling.Ignore,
            };

            return(JsonConvert.SerializeObject(obj, settings));
        }
    }
Пример #15
0
        private static JsonSerializerSettings SerializerSettings(ISlackTypeResolver slackTypeResolver)
        {
            var namingStrategy = new SnakeCaseNamingStrategy();

            return(new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                ContractResolver = new DefaultContractResolver
                {
                    NamingStrategy = namingStrategy,
                },
                Converters =
                {
                    new EnumNameConverter(namingStrategy),
                    new SlackTypeConverter(slackTypeResolver)
                }
            });
        }
        /// <summary>
        /// Determines which contract type is created for the given type.
        /// </summary>
        /// <param name="objectType">Type of the object.</param>
        /// <returns>
        /// A <see cref="T:Newtonsoft.Json.Serialization.JsonContract" /> for the given type.
        /// </returns>
        protected override JsonContract CreateContract(Type objectType)
        {
            var renames = objectType.GetField("Renames", BindingFlags.NonPublic | BindingFlags.Static);

            if (renames != null)
            {
                var renameDict = renames.GetValue(null) as Dictionary <string, string>;
                NamingStrategy = new SnakeCaseNamingStrategyWithRenaming(renameDict);
            }
            else
            {
                if (NamingStrategy == null)
                {
                    NamingStrategy = new SnakeCaseNamingStrategy();
                }
            }

            return(base.CreateContract(objectType));
        }
Пример #17
0
        static CustomJsonSerializer()
        {
            SnakeCaseNamingStrategy namingStrategy = new SnakeCaseNamingStrategy();

            JsonSerializerSettings settings = new JsonSerializerSettings
            {
                NullValueHandling    = NullValueHandling.Ignore,
                DefaultValueHandling = DefaultValueHandling.Ignore,
                ContractResolver     = new DoNotSerializeEmptyListsResolver {
                    NamingStrategy = namingStrategy
                }
            };

            settings.Converters.Add(new QosLevelConverter());
            settings.Converters.Add(new StringEnumConverter(namingStrategy));
            settings.Converters.Add(new ConnectionInfoConverter());

            Serializer = JsonSerializer.Create(settings);
        }
Пример #18
0
        /// <summary>Creates the sink for a given collector endpoint.</summary>
        /// <param name="appName">Application or service name.</param>
        /// <param name="environment">Runtime environment (e.g. DEV or PROD).</param>
        /// <param name="endpointUri">Endpoint that contains the access token.</param>
        /// <param name="batchSizeLimit">The maximum number of events to include in a single batch.</param>
        /// <param name="period">The time to wait between checking for event batches.</param>
        /// <param name="clientBuilder">Optional client builder, which can be used to customize client
        /// calls (e.g. with custom request headers).</param>
        public HttpSink(string appName, string environment, string endpointUri, int batchSizeLimit, TimeSpan period,
                        Func <HttpClient> clientBuilder = null) : base(batchSizeLimit, period)
        {
            EndpointUri = endpointUri;
            Client      = clientBuilder == null ? new HttpClient() : clientBuilder();
            AppName     = appName;
            Environment = environment;

            SnakeCasing = new SnakeCaseNamingStrategy();
            var contractResolver = new DefaultContractResolver
            {
                NamingStrategy = SnakeCasing
            };

            JsonSerializerSettings = new JsonSerializerSettings
            {
                ContractResolver = contractResolver,
                Formatting       = Formatting.None //ensures everything is on one line
            };
        }
        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            var property = base.CreateProperty(member, memberSerialization);

            NamingStrategy = new SnakeCaseNamingStrategy();

            property.ShouldSerialize = propInstance => property.Writable;

            if (!property.Readable)
            {
                var prop = member as PropertyInfo;
                if (property != null)
                {
                    var hasPrivateGetter = prop.GetGetMethod(true) != null;
                    property.Readable = hasPrivateGetter;
                }
            }

            return(property);
        }
Пример #20
0
        private static JsonSerializerSettings SerializerSettings(ISlackTypeResolver slackTypeResolver)
        {
            var namingStrategy = new SnakeCaseNamingStrategy();

            return(new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                DateFormatString = "yyyy-MM-dd",
                ContractResolver = new SlackNetContractResolver
                {
                    NamingStrategy = namingStrategy,
                },
                Converters =
                {
                    new EnumNameConverter(namingStrategy),
                    new TimeSpanConverter(),
                    new SlackTypeConverter(slackTypeResolver)
                }
            });
        }
Пример #21
0
        private static JsonSerializerSettings SerializerSettings(ISlackTypeResolver slackTypeResolver)
        {
            var namingStrategy = new SnakeCaseNamingStrategy();

            return(new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                ContractResolver = new SlackNetContractResolver
                {
                    NamingStrategy = namingStrategy,
                },
                Converters =
                {
                    new EnumNameConverter(namingStrategy),
                    new SlackTypeConverter(slackTypeResolver),
                    new IsoDateTimeConverter {
                        DateTimeFormat = "YYYY-MM-DD"
                    }
                }
            });
        }
        public static JsonSerializerSettings CreateJsonSerializerSettings(Formatting formatting, IContractResolver contractResolver = null)
        {
            var snakeCaseNamingStrategy = new SnakeCaseNamingStrategy();

            var settings = new JsonSerializerSettings
            {
                ContractResolver = contractResolver ?? new DefaultContractResolver
                {
                    NamingStrategy = snakeCaseNamingStrategy
                },
                DateFormatHandling    = DateFormatHandling.IsoDateFormat,
                NullValueHandling     = NullValueHandling.Ignore,
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                Formatting            = formatting
            };

            settings.Converters.Add(
                new StringEnumConverter(snakeCaseNamingStrategy)
                );

            return(settings);
        }
Пример #23
0
        public DtoTransformer(CryptoProvider cryptoProvider, HashUtils hashUtils, bool hashSearchKeys = true,
            Func<SecretsData> secretKeyAccessor = null)
        {
            _cryptoProvider = cryptoProvider;
            _hashUtils = hashUtils;
            _hashSearchKeys = hashSearchKeys;
            SecretKeyAccessor = secretKeyAccessor;
            var nameTransformer = new SnakeCaseNamingStrategy(true, true);
            foreach (var field in Enum.GetValues(typeof(SortField)).Cast<SortField>())
            {
                _enumMapping[field] = nameTransformer.GetPropertyName(field.ToString(), true);
            }

            foreach (var field in Enum.GetValues(typeof(StringField)).Cast<StringField>())
            {
                _enumMapping[field] = nameTransformer.GetPropertyName(field.ToString(), true);
            }

            foreach (var field in Enum.GetValues(typeof(NumberField)).Cast<NumberField>())
            {
                _enumMapping[field] = nameTransformer.GetPropertyName(field.ToString(), true);
            }
        }
        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            try
            {
                var property = base.CreateProperty(member, memberSerialization);
                NamingStrategy = new SnakeCaseNamingStrategy();
                if (!property.Writable)
                {
                    var prop = member as PropertyInfo;
                    if (property != null)
                    {
                        var hasPrivateSetter = prop.GetSetMethod(true) != null;
                        property.Writable = hasPrivateSetter;
                    }
                }

                return(property);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 public SnakeCasePropertyNamesContractResolver()
 {
     NamingStrategy = new SnakeCaseNamingStrategy(true, true);
 }
 public RequestResponseContractResolver()
 {
     NamingStrategy = new SnakeCaseNamingStrategy();
 }
Пример #27
0
 public string ResolvePropertyName(SnakeCaseNamingStrategy namingStragegy, string name)
 {
     return(XStrings.ToSnakeCase(name));
 }
 public MandrillJsonContractResolver()
 {
     NamingStrategy = new SnakeCaseNamingStrategy(false, false);
 }
Пример #29
0
 public SnakePropertyContractResolver()
 {
     NamingStrategy = new SnakeCaseNamingStrategy();
 }
Пример #30
0
 public ShouldSerializeContractResolver(List <string> serializableProperties)
 {
     this.serializableProperties = serializableProperties;
     NamingStrategy = new SnakeCaseNamingStrategy();
 }