public override object ReadJson()

in Chemistry/src/DataModel/Serialization/JsonConverters/HamiltonianTermsJsonConverter.cs [47:75]


        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Debug.Assert(CanConvert(objectType));

            var keyType = objectType.BaseType.GetGenericArguments()[0];
            var valueType = objectType.BaseType.GetGenericArguments()[1];
            var tupleType = typeof(ValueTuple<,>).MakeGenericType(keyType, valueType);
            
            var result = (IDictionary)Activator.CreateInstance(objectType);

            if (reader.TokenType == JsonToken.Null)
                return null;

            while (reader.Read())
            {
                if (reader.TokenType == JsonToken.EndArray)
                {
                    return result;
                }

                if (reader.TokenType == JsonToken.StartObject)
                {
                    dynamic item = serializer.Deserialize(reader, tupleType);
                    result.Add(item.Item1, item.Item2);
                }
            }

            return result;
        }