/**
         * the current type will be inferred either for the navigation context or the first type !
         * otherwise a full parse will be necessary
         */
        public Object toObject(string json, Type typeHint = null)
        {
            //todo revise this - it makes the serializer single threaded !
            this.json = json;
            if (setValueinObject == null)
            {
                throw new Exception("setValueInObject unset !");
            }

            JSONExplorerImpl impl = new JSONExplorerImpl();

            this.typeHint   = typeHint;
            this.objects    = new Stack <StackFrame>();
            this.lastObject = null;
            impl.explore(json, this);
            if (lastObject is ObjectFrame)
            {
                lastObject = ((ObjectFrame)lastObject).theObject;
            }
            return(lastObject);
        }
        /**
         * the current type will be inferred either for the navigation context or the first type !
         * otherwise a full parse will be necessary
         */
        public Object toObject(string json, Type typeHint = null)
        {
            //todo revise this - it makes the serializer single threaded !
            this.json = json;
            if (setValueinObject == null)
            {
                throw new Exception("setValueInObject unset !");
            }

            JSONExplorerImpl impl = new JSONExplorerImpl();
            this.typeHint = typeHint;
            this.objects = new Stack<StackFrame>();
            this.lastObject = null;
            impl.explore(json, this);
            if (lastObject is ObjectFrame) lastObject = ((ObjectFrame)lastObject).theObject;
            return lastObject;
        }