|  | @@ -1,82 +0,0 @@
 | 
	
		
			
				|  |  | -#nullable enable
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -using System;
 | 
	
		
			
				|  |  | -using System.Collections;
 | 
	
		
			
				|  |  | -using System.Collections.Generic;
 | 
	
		
			
				|  |  | -using System.Globalization;
 | 
	
		
			
				|  |  | -using System.Reflection;
 | 
	
		
			
				|  |  | -using System.Text.Json;
 | 
	
		
			
				|  |  | -using System.Text.Json.Serialization;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -namespace MediaBrowser.Common.Json.Converters
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    /// <summary>
 | 
	
		
			
				|  |  | -    /// Converter for Dictionaries without string key.
 | 
	
		
			
				|  |  | -    /// TODO This can be removed when System.Text.Json supports Dictionaries with non-string keys.
 | 
	
		
			
				|  |  | -    /// </summary>
 | 
	
		
			
				|  |  | -    /// <typeparam name="TKey">Type of key.</typeparam>
 | 
	
		
			
				|  |  | -    /// <typeparam name="TValue">Type of value.</typeparam>
 | 
	
		
			
				|  |  | -    internal sealed class JsonNonStringKeyDictionaryConverter<TKey, TValue> : JsonConverter<IDictionary<TKey, TValue>>
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        /// <summary>
 | 
	
		
			
				|  |  | -        /// Read JSON.
 | 
	
		
			
				|  |  | -        /// </summary>
 | 
	
		
			
				|  |  | -        /// <param name="reader">The Utf8JsonReader.</param>
 | 
	
		
			
				|  |  | -        /// <param name="typeToConvert">The type to convert.</param>
 | 
	
		
			
				|  |  | -        /// <param name="options">The json serializer options.</param>
 | 
	
		
			
				|  |  | -        /// <returns>Typed dictionary.</returns>
 | 
	
		
			
				|  |  | -        /// <exception cref="NotSupportedException">Dictionary key type not supported.</exception>
 | 
	
		
			
				|  |  | -        public override IDictionary<TKey, TValue> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            var convertedType = typeof(Dictionary<,>).MakeGenericType(typeof(string), typeToConvert.GenericTypeArguments[1]);
 | 
	
		
			
				|  |  | -            var value = JsonSerializer.Deserialize(ref reader, convertedType, options);
 | 
	
		
			
				|  |  | -            var instance = (Dictionary<TKey, TValue>)Activator.CreateInstance(
 | 
	
		
			
				|  |  | -                typeToConvert,
 | 
	
		
			
				|  |  | -                BindingFlags.Instance | BindingFlags.Public,
 | 
	
		
			
				|  |  | -                null,
 | 
	
		
			
				|  |  | -                null,
 | 
	
		
			
				|  |  | -                CultureInfo.CurrentCulture);
 | 
	
		
			
				|  |  | -            var enumerator = (IEnumerator)convertedType.GetMethod("GetEnumerator")!.Invoke(value, null);
 | 
	
		
			
				|  |  | -            var parse = typeof(TKey).GetMethod(
 | 
	
		
			
				|  |  | -                "Parse",
 | 
	
		
			
				|  |  | -                0,
 | 
	
		
			
				|  |  | -                BindingFlags.Public | BindingFlags.Static,
 | 
	
		
			
				|  |  | -                null,
 | 
	
		
			
				|  |  | -                CallingConventions.Any,
 | 
	
		
			
				|  |  | -                new[] { typeof(string) },
 | 
	
		
			
				|  |  | -                null);
 | 
	
		
			
				|  |  | -            if (parse == null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                throw new NotSupportedException($"{typeof(TKey)} as TKey in IDictionary<TKey, TValue> is not supported.");
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            while (enumerator.MoveNext())
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                var element = (KeyValuePair<string?, TValue>)enumerator.Current;
 | 
	
		
			
				|  |  | -                instance.Add((TKey)parse.Invoke(null, new[] { (object?)element.Key }), element.Value);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            return instance;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        /// <summary>
 | 
	
		
			
				|  |  | -        /// Write dictionary as Json.
 | 
	
		
			
				|  |  | -        /// </summary>
 | 
	
		
			
				|  |  | -        /// <param name="writer">The Utf8JsonWriter.</param>
 | 
	
		
			
				|  |  | -        /// <param name="value">The dictionary value.</param>
 | 
	
		
			
				|  |  | -        /// <param name="options">The Json serializer options.</param>
 | 
	
		
			
				|  |  | -        public override void Write(Utf8JsonWriter writer, IDictionary<TKey, TValue> value, JsonSerializerOptions options)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            var convertedDictionary = new Dictionary<string?, TValue>(value.Count);
 | 
	
		
			
				|  |  | -            foreach (var (k, v) in value)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                if (k != null)
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    convertedDictionary[k.ToString()] = v;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            JsonSerializer.Serialize(writer, convertedDictionary, options);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 |