public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var newOptions = new JsonSerializerOptions(options); newOptions.Converters.Remove(this); newOptions.Converters.Add(_innerJsonStringEnumConverter.CreateConverter(typeToConvert, newOptions)); return(JsonSerializer.Deserialize(ref reader, typeToConvert, newOptions)); }
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var newOptions = JsonSerializerOptionsHelper.Create(options, x => x == this || x.GetType() == typeof(AbpStringToEnumFactory)); newOptions.Converters.Add(_innerJsonStringEnumConverter.CreateConverter(typeToConvert, newOptions)); return(JsonSerializer.Deserialize <T>(ref reader, newOptions)); }
public EnumNamingPolicyCache(JsonNamingPolicy?defaultWriteNamingPolicy, bool allowIntegerValues) { var enumType = typeof(T); var enumNameCache = new EnumNameCache(enumType, defaultWriteNamingPolicy); ReadNamingPolicy = new EnumReadNamingPolicy(enumNameCache); var writeNamingPolicy = new EnumWriteNamingPolicy(enumNameCache, defaultWriteNamingPolicy); var defaultJsonConverterFactory = new JsonStringEnumConverter(namingPolicy: writeNamingPolicy, allowIntegerValues: allowIntegerValues); DefaultJsonConverter = (JsonConverter <T>)defaultJsonConverterFactory.CreateConverter(typeToConvert: enumType, options: null); }
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { var query = from field in typeToConvert.GetFields(BindingFlags.Public | BindingFlags.Static) let attr = field.GetCustomAttribute <EnumMemberAttribute>() where attr != null select(field.Name, attr.Value); var dictionary = query.ToDictionary(p => p.Name, p => p.Value); return(dictionary.Count > 0 ? new JsonStringEnumConverter(new DictionaryLookupNamingPolicy(dictionary !, _namingPolicy), _allowIntegerValues) .CreateConverter(typeToConvert, options) : _baseConverter.CreateConverter(typeToConvert, options)); }
/// <summary> /// If the enum has 'EnumValueAttribute' return the 'EnumValueJsonConverter', /// otherwise return the 'JsonStringEnumConverter'. /// </summary> /// <param name="typeToConvert"></param> /// <param name="options"></param> /// <returns></returns> public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { var values = Enum.GetValues(typeToConvert); foreach (var value in values) { var mi = typeToConvert.GetMember(value.ToString()); var evmi = mi.FirstOrDefault(m => m.DeclaringType == typeToConvert); var attr = evmi.GetCustomAttribute <EnumValueAttribute>(); if (attr != null) { return((JsonConverter)Activator.CreateInstance(typeof(EnumValueJsonConverter <>).MakeGenericType(typeToConvert))); } } return(_converter.CreateConverter(typeToConvert, options)); }
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { var query = from field in typeToConvert.GetFields(BindingFlags.Public | BindingFlags.Static) let attr = field.GetCustomAttribute <DescriptionAttribute>() where attr != null select(field.Name, attr.Description); var dictionary = query.ToDictionary(p => p.Item1, p => p.Item2); if (dictionary.Count > 0) { return(new JsonStringEnumConverter(new DictionaryLookupNamingPolicy(dictionary, namingPolicy), allowIntegerValues).CreateConverter(typeToConvert, options)); } else { return(baseConverter.CreateConverter(typeToConvert, options)); } }
/// <summary> /// Creates a new JSON converter /// </summary> /// <param name="typeToConvert">Type to convert</param> /// <param name="options">Conversion options</param> /// <returns>JSON converter</returns> public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { return(_converter.CreateConverter(typeToConvert, options)); }
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) => s_stringEnumConverter.CreateConverter(typeToConvert, options);
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { var converterFactory = new JsonStringEnumConverter(new SnakeCaseNamingPolicy(), false); return(converterFactory.CreateConverter(typeToConvert, options)); }