public static JsonTreeNode Parse(JsonTreeNode tree, Utf8String segment) { // skip white space int pos; if (!segment.TrySearchByte(x => !char.IsWhiteSpace((char)x), out pos)) { throw new ParserException("only whitespace"); } segment = segment.Subbytes(pos); var valueType = GetValueType(segment); switch (valueType) { case ValueNodeType.Boolean: case ValueNodeType.Integer: case ValueNodeType.Number: case ValueNodeType.Null: case ValueNodeType.NaN: case ValueNodeType.Infinity: case ValueNodeType.MinusInfinity: return(ParsePrimitive(tree, segment, valueType)); case ValueNodeType.String: return(ParseString(tree, segment)); case ValueNodeType.Array: // fall through return(ParseArray(tree, segment)); case ValueNodeType.Object: // fall through return(ParseObject(tree, segment)); default: throw new NotImplementedException(); } }