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"); }
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; } }
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; } }
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"); }