public override object ReadJson()

in Chemistry/src/DataModel/Serialization/JsonConverters/FermionWavefunctionJsonConverter.cs [47:76]


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

            var keyType = objectType.GetBasestType().GetGenericArguments()[0];
            var valueType = objectType.GetBasestType().GetGenericArguments()[1];
            var tupleType = typeof(ValueTuple<,>).MakeGenericType(keyType, valueType);
            var dictionaryType = typeof(Dictionary<,>).MakeGenericType(keyType, valueType);

            var result = (IDictionary)Activator.CreateInstance(dictionaryType);

            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;
        }