internal JsonConverter GetDictionaryKeyConverter(Type keyType)
        {
            _dictionaryKeyConverters ??= GetDictionaryKeyConverters();

            if (!_dictionaryKeyConverters.TryGetValue(keyType, out JsonConverter? converter))
            {
                if (keyType.IsEnum)
                {
                    converter = GetEnumConverter();
                    _dictionaryKeyConverters[keyType] = converter;
                }
                else
                {
                    ThrowHelper.ThrowNotSupportedException_DictionaryKeyTypeNotSupported(keyType);
                }
            }

            return(converter !);

            // Use factory pattern to generate an EnumConverter with AllowStrings and AllowNumbers options for dictionary keys.
            // There will be one converter created for each enum type.
            JsonConverter GetEnumConverter()
            => EnumConverterFactory.Create(keyType, EnumConverterOptions.AllowStrings | EnumConverterOptions.AllowNumbers, this);
        }
示例#2
0
 /// <inheritdoc />
 public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) =>
 EnumConverterFactory.Create(typeToConvert, _converterOptions, _namingPolicy, options);