Result ParseObject(ref Context con, ref JsonValue value) { if (string.IsNullOrEmpty(con.json)) { return(Result.EXPECT_VALUE); } if (con.json[con.pos] != '{') { return(Result.INVALID_VALUE); } if (con.json[con.pos + 1] == '}') { con.pos += 2; value.SetType(ValueType.OBJECT); value.ClearObject(); return(Result.PARSE_OK); } con.pos++; string keyName = null; while (true) { if (con.json[con.pos] == ':') { if (keyName == null) { return(Result.MISS_KEY); } con.pos++; } else if (con.json[con.pos] == ',') { con.pos++; keyName = null; } else if (con.json[con.pos] == '}') { con.pos++; value.SetType(ValueType.OBJECT); return(Result.PARSE_OK); } else if (con.json[con.pos] == ' ') { con.pos++; } else { JsonValue temp = new JsonValue(ValueType.NULL); if (con.json[con.pos] == '\"') { Result res = ParseValue(ref con, ref temp); if (res != Result.PARSE_OK) { return(res); } if (keyName == null) { if (temp.GetType() != ValueType.STRING) { return(Result.MISS_KEY); } keyName = ((string)temp.GetValue()); } else { value.AddKeyValue(keyName, temp); } } else { Result res = ParseValue(ref con, ref temp); if (res != Result.PARSE_OK) { return(res); } if (keyName == null) { return(Result.MISS_KEY); } value.AddKeyValue(keyName, temp); } } } }