protected internal override object Read(ContentReader input, object existingInstance)
        {
            T obj;

            if (existingInstance != null)
            {
                obj = (T)existingInstance;
            }
            else
            {
                obj = _constructor == null
                    ? Activator.CreateInstance <T>()
                    : (T)_constructor.Invoke(null);
            }

            if (_baseTypeReader != null)
            {
                _baseTypeReader.Read(input, obj);
            }

            var boxed = (object)obj; // Box the type once.

            foreach (var reader in _readers)
            {
                reader.Invoke(input, boxed);
            }

            return(obj);
        }