/// <summary> /// Constructor. /// </summary> /// <param name="namingPolicy"> /// Optional naming policy for writing enum values. /// </param> /// <param name="allowIntegerValues"> /// True to allow undefined enum values. When true, if an enum value isn't /// defined it will output as a number rather than a string. /// </param> public JsonStringEnumConverter(JsonNamingPolicy?namingPolicy = null, bool allowIntegerValues = true) { _namingPolicy = namingPolicy; _converterOptions = allowIntegerValues ? EnumConverterOptions.AllowNumbers | EnumConverterOptions.AllowStrings : EnumConverterOptions.AllowStrings; }
public EnumConverter(EnumConverterOptions converterOptions, JsonNamingPolicy?namingPolicy, JsonSerializerOptions serializerOptions) { _converterOptions = converterOptions; _namingPolicy = namingPolicy; _nameCache = new ConcurrentDictionary <ulong, JsonEncodedText>(); string[] names = Enum.GetNames(TypeToConvert); Array values = Enum.GetValues(TypeToConvert); Debug.Assert(names.Length == values.Length); JavaScriptEncoder?encoder = serializerOptions.Encoder; for (int i = 0; i < names.Length; i++) { if (_nameCache.Count >= NameCacheSizeSoftLimit) { break; } T value = (T)values.GetValue(i) !; ulong key = ConvertToUInt64(value); string name = names[i]; _nameCache.TryAdd( key, namingPolicy == null ? JsonEncodedText.Encode(name, encoder) : FormatEnumValue(name, encoder)); } }
public JsonValueConverterEnumWithAttributeSupport(EnumConverterOptions options, [CanBeNull] JsonNamingPolicy namingPolicy = null) { _converterOptions = options; if (namingPolicy != null) { _nameCache = new ConcurrentDictionary <string, string>(); } else { namingPolicy = new JsonDefaultNamingPolicy(); } _namingPolicy = namingPolicy; }
public EnumConverter(EnumConverterOptions options, JsonNamingPolicy?namingPolicy) { _converterOptions = options; if (namingPolicy != null) { _nameCache = new ConcurrentDictionary <string, string>(); } else { namingPolicy = JsonNamingPolicy.Default; } _namingPolicy = namingPolicy; }
/// <summary> /// Constructor. /// </summary> /// <param name="namingPolicy">Naming policy for writing enum values [Optional.</param> /// <param name="allowIntegerValues">True to allow undefined enum values. When true, if an enum value isn't defined it will output as a number rather than a string.</param> /// <param name="parseEnumMemberAttribute">Parse using <see cref="Runtime.Serialization.EnumMemberAttribute"/>, default is <see langword="true"/>.</param> /// <param name="parseDisplayAttribute">Parse using <see cref="ComponentModel.DataAnnotations.DisplayAttribute"/>, default is <see langword="false"/>.</param> /// <param name="parseDescriptionAttribute">Parse using <see cref="ComponentModel.DescriptionAttribute"/>, default is <see langword="false"/>.</param> public JsonStringEnumConverterWithAttributeSupport([CanBeNull] JsonNamingPolicy namingPolicy = null, bool allowIntegerValues = true, bool parseEnumMemberAttribute = true, bool parseDisplayAttribute = false, bool parseDescriptionAttribute = false) { _namingPolicy = namingPolicy; _converterOptions = allowIntegerValues ? EnumConverterOptions.AllowNumbers | EnumConverterOptions.AllowStrings : EnumConverterOptions.AllowStrings; if (parseEnumMemberAttribute) { _converterOptions |= EnumConverterOptions.ParseEnumMemberAttribute; } if (parseDisplayAttribute) { _converterOptions |= EnumConverterOptions.ParseDisplayAttribute; } if (parseDescriptionAttribute) { _converterOptions |= EnumConverterOptions.ParseDescriptionAttribute; } }
public EnumConverter(EnumConverterOptions converterOptions, JsonNamingPolicy?namingPolicy, JsonSerializerOptions serializerOptions) { _converterOptions = converterOptions; _namingPolicy = namingPolicy; _nameCacheForWriting = new ConcurrentDictionary <ulong, JsonEncodedText>(); if (namingPolicy != null) { _nameCacheForReading = new ConcurrentDictionary <string, T>(); } #if NETCOREAPP string[] names = Enum.GetNames <T>(); T[] values = Enum.GetValues <T>(); #else string[] names = Enum.GetNames(TypeToConvert); Array values = Enum.GetValues(TypeToConvert); #endif Debug.Assert(names.Length == values.Length); JavaScriptEncoder?encoder = serializerOptions.Encoder; for (int i = 0; i < names.Length; i++) { #if NETCOREAPP T value = values[i]; #else T value = (T)values.GetValue(i) !; #endif ulong key = ConvertToUInt64(value); string name = names[i]; string jsonName = FormatJsonName(name, namingPolicy); _nameCacheForWriting.TryAdd(key, JsonEncodedText.Encode(jsonName, encoder)); _nameCacheForReading?.TryAdd(jsonName, value); } }
public EnumConverter(EnumConverterOptions converterOptions, JsonSerializerOptions serializerOptions) : this(converterOptions, namingPolicy : null, serializerOptions) { }
internal static JsonConverter Create(Type enumType, EnumConverterOptions converterOptions, JsonNamingPolicy?namingPolicy, JsonSerializerOptions serializerOptions) { return((JsonConverter)Activator.CreateInstance( GetEnumConverterType(enumType), new object?[] { converterOptions, namingPolicy, serializerOptions }) !); }
public EnumConverter(EnumConverterOptions options) : this(options, namingPolicy : null) { }
public JsonConverterEnum(EnumConverterOptions options) : this(options, namingPolicy : null) { }