public object DeserializeToType(FactReference reference, Type type) { if (!objectByReference.TryGetValue(reference, out var runtimeFact)) { var(newCache, deserializer) = DeserializerCache.GetDeserializer(type); DeserializerCache = newCache; try { runtimeFact = deserializer(graph.GetFact(reference), this); objectByReference = objectByReference.Add(reference, runtimeFact); } catch (TargetInvocationException tie) { throw tie.InnerException; } } return(runtimeFact); }