Exemple #1
0
 /// <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));
            }
        }
Exemple #3
0
 public JsonValueConverterEnumWithAttributeSupport(EnumConverterOptions options, [CanBeNull] JsonNamingPolicy namingPolicy = null)
 {
     _converterOptions = options;
     if (namingPolicy != null)
     {
         _nameCache = new ConcurrentDictionary <string, string>();
     }
     else
     {
         namingPolicy = new JsonDefaultNamingPolicy();
     }
     _namingPolicy = namingPolicy;
 }
Exemple #4
0
 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;
            }
        }
Exemple #6
0
        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)
 {
 }
Exemple #8
0
 internal static JsonConverter Create(Type enumType, EnumConverterOptions converterOptions, JsonNamingPolicy?namingPolicy, JsonSerializerOptions serializerOptions)
 {
     return((JsonConverter)Activator.CreateInstance(
                GetEnumConverterType(enumType),
                new object?[] { converterOptions, namingPolicy, serializerOptions }) !);
 }
Exemple #9
0
 public EnumConverter(EnumConverterOptions options)
     : this(options, namingPolicy : null)
 {
 }
Exemple #10
0
 public JsonConverterEnum(EnumConverterOptions options)
     : this(options, namingPolicy : null)
 {
 }