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); }
/// <inheritdoc /> public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) => EnumConverterFactory.Create(typeToConvert, _converterOptions, _namingPolicy, options);