コード例 #1
0
        private void CollectValue(JsonToken jtoken)
        {
            var item = new JsonValue(jtoken.Type, jtoken.Value);

            //вариант с автономным значением
            if (null == rootitem)
            {
                rootitem    = item;
                currentitem = item;
                return;
            }

            //вариант выставления свойства значению
            if (null != currenttuple)
            {
                currenttuple.Value = item;
                (currentitem as JsonObject).Properties.Add(currenttuple);
                currenttuple = null;
                //пока еще не было запятой - нельзя новые значения
                currentitem.CanAddItems = false;
                return;
            }

            //вариант с массивом
            if (currentitem is JsonArray)
            {
                (currentitem as JsonArray).Values.Add(item);
                //пока нет запятых - нельзя новые значения
                currentitem.CanAddItems = false;
                return;
            }

            throw new Exception("insuficient place of value");
        }
コード例 #2
0
        private void ProcessCloseArray(JsonToken jsonToken)
        {
            var obj = currentitem as JsonArray;

            if (null == obj)
            {
                throw new Exception("cannot close array here");
            }
            currentitem = obj.Parent;
            if (null != currentitem)
            {
                //пока не было запятой
                currentitem.CanAddItems = false;
            }
        }
コード例 #3
0
        private void ProcessCloseClass(JsonToken jsonToken)
        {
            var obj = currentitem as JsonObject;

            if (null == obj)
            {
                throw new Exception("cannot close object here");
            }
            if (null != currenttuple)
            {
                throw new Exception("cannot object class here - not closed property");
            }
            currentitem = obj.Parent;
            if (null != currentitem)
            {
                //пока не было запятой
                currentitem.CanAddItems = false;
            }
        }
コード例 #4
0
        private void ProcessOpenArray(JsonToken jsonToken)
        {
            if (!CanSetValue())
            {
                throw new Exception("cannot open array here");
            }
            var newobj = new JsonArray();

            // вариант с корневым объектом
            if (null == rootitem)
            {
                rootitem    = newobj;
                currentitem = newobj;
                return;
            }

            // вариант с значением свойства
            if (null != currenttuple && currenttuple.HasColon)
            {
                newobj.Parent      = currentitem;
                currenttuple.Value = newobj;
                (currentitem as JsonObject).Properties.Add(currenttuple);
                currenttuple = null;
                currentitem  = newobj;
                return;
            }

            if (currentitem is JsonArray && currentitem.CanAddItems)
            {
                newobj.Parent = currentitem;
                (currentitem as JsonArray).Values.Add(newobj);
                currentitem = newobj;
                return;
            }
            throw new Exception("cannot open object here");
        }