public JsonNode Obtain() { JsonNode n = new JsonNode(JsonNodeType.KeyValue); JsonNode last; JsonNode cur = null; bool preColon = true; string curName = ""; JsonParserPiece f; while ((f = parser.GetNext()) != null) { last = cur; switch (f.Type) { case JsonParserPieceType.OpenCurly: cur = new JsonNode(JsonNodeType.KeyValue); break; case JsonParserPieceType.OpenBracket: break; case JsonParserPieceType.CloseCurly: break; case JsonParserPieceType.CloseBracket: break; case JsonParserPieceType.Number: preColon = true; break; case JsonParserPieceType.String: if (preColon) { curName = f.Value; } else { cur.Type = JsonNodeType.Native; } break; case JsonParserPieceType.Word: preColon = true; break; case JsonParserPieceType.Colon: preColon = false; break; case JsonParserPieceType.Equals: break; case JsonParserPieceType.Comma: break; default: throw new ArgumentOutOfRangeException(); } } return(n); }