public void CamelCaseIsConvertedToSnakeCase() { Assert.AreEqual("single", PropertyCasingHelper.CamelToSnake("Single")); Assert.AreEqual("two_words", PropertyCasingHelper.CamelToSnake("TwoWords")); Assert.AreEqual("test_many_separate_words_next_to_each_other", PropertyCasingHelper.CamelToSnake("TestManySeparateWordsNextToEachOther")); Assert.AreEqual("test_1_number", PropertyCasingHelper.CamelToSnake("Test1Number")); Assert.AreEqual("test_451_numbers", PropertyCasingHelper.CamelToSnake("Test451Numbers")); }
public void SnakeCaseIsConvertedToCamelCase() { Assert.AreEqual("Single", PropertyCasingHelper.SnakeToCamel("single")); Assert.AreEqual("TwoWords", PropertyCasingHelper.SnakeToCamel("two_words")); Assert.AreEqual("ManySeparateWords", PropertyCasingHelper.SnakeToCamel("many_separate_words")); Assert.AreEqual("ANumber3WithWords", PropertyCasingHelper.SnakeToCamel("a_number_3_with_words")); Assert.AreEqual("ManyNumeric345Digits", PropertyCasingHelper.SnakeToCamel("many_numeric_345_digits")); Assert.AreEqual("WordAndAnother", PropertyCasingHelper.SnakeToCamel("wOrd_and_ANOTHER")); }
public void AllCapitalsAreNotConverted() { Assert.AreEqual("DESC", PropertyCasingHelper.CamelToSnake("DESC")); Assert.AreEqual("de_s_c", PropertyCasingHelper.CamelToSnake("DeSC")); Assert.AreEqual("DESC", PropertyCasingHelper.SnakeToCamel("DESC")); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) { return(null); } Type type = GetUnderlyingType(objectType); if (type.IsEnum) { if (reader.TokenType == JsonToken.String) { string enumText = PropertyCasingHelper.SnakeToCamel(reader.Value.ToString()); string[] names = Enum.GetNames(type); string match = names.FirstOrDefault(n => String.Equals(n, enumText, StringComparison.InvariantCultureIgnoreCase)); if (match != null) { return(Enum.Parse(type, match)); } } else if (reader.TokenType == JsonToken.Integer) { int enumVal = Convert.ToInt32(reader.Value); int[] values = (int[])Enum.GetValues(type); if (values.Contains(enumVal)) { return(Enum.ToObject(type, enumVal)); } } WarnOfMissingDeserializationOpportunity(reader.Value.ToString(), type.FullName); return(null); } object instance = objectType.GetConstructor(Type.EmptyTypes).Invoke(null); PropertyInfo[] properties = objectType.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); IEnumerable <JProperty> jsonProperties = JObject.Load(reader).Properties(); foreach (JProperty jsonProperty in jsonProperties) { string name = PropertyCasingHelper.SnakeToCamel(jsonProperty.Name); PropertyInfo property = properties.FirstOrDefault(pi => String.Equals(pi.Name, name, StringComparison.OrdinalIgnoreCase)); if (property != null) { if (jsonProperty.Value.Type != JTokenType.Null && !IsUnparseableNumeric(property, jsonProperty)) { if (property.PropertyType == typeof(DateTime?)) { //Want DateTimes to always be treated as UTC var rawDate = (DateTime)jsonProperty.Value.ToObject(typeof(DateTime), serializer); var convertedDate = new DateTime(); switch (rawDate.Kind) { case DateTimeKind.Local: convertedDate = rawDate.ToUniversalTime(); break; case DateTimeKind.Unspecified: convertedDate = DateTime.SpecifyKind(rawDate, DateTimeKind.Utc); break; case DateTimeKind.Utc: convertedDate = rawDate; break; } property.SetValue(instance, convertedDate, null); } else { if (property.Name == "Choices" && jsonProperty.Value.Type != JTokenType.Array) { var legacyProperty = properties.FirstOrDefault(pi => String.Equals("LegacyChoices", pi.Name, StringComparison.OrdinalIgnoreCase)); legacyProperty.SetValue(instance, jsonProperty.Value.ToObject(legacyProperty.PropertyType, serializer), null); } else { property.SetValue(instance, jsonProperty.Value.ToObject(property.PropertyType, serializer), null); } } } } else { WarnOfMissingDeserializationOpportunity(jsonProperty.Name, type.Name); } } return(instance); }