public object Read(object value, ProtoReader source) { // TODO what may happen if old value is already existing reference? do we need to consider it? var v = _subTypeHelpers.TryRead(_model[_typeKey], value?.GetType(), source); if (v != null) { value = v.Serializer.CreateInstance(source); } else if (value != null) { ProtoReader.NoteObject(value, source); } else { throw new ProtoException(CantCreateInstanceMessage); } // each CreateInstance notes object ProtoReader.NoteLateReference(_baseTypeKey, value, source); return(value); }