protected JsonObject InternalReadObject() { JsonObject ret = new JsonObject(); while (true) { JsonScannerToken token = GetToken(); if (token.Type == eTokenType.FechaChaves) { return(ret); } if (token.Type == eTokenType.String) { string nome = token.Conteudo.ToString(); token = GetToken(); if (token.Type != eTokenType.DoisPontos) { throw ReturnError("Esperado :"); } ret.Add(nome, InternalReadValue()); token = GetToken(); if (token.Type == eTokenType.FechaChaves) { return(ret); } if (token.Type == eTokenType.Virgula) { continue; } } throw ReturnError("Par nome/valor inválido"); } }
private object ReadVetor() { List <object> ret = new List <object>(); while (true) { JsonScannerToken token = GetToken(); if (token.Type == eTokenType.FechaColchetes) { return(ret.ToArray()); } PushToken(token); ret.Add(ReadValor()); token = GetToken(); if (token.Type == eTokenType.FechaColchetes) { return(ret.ToArray()); } if (token.Type == eTokenType.Virgula) { continue; } return(ReturnError("Item de vetor inválido")); } }
private JsonVector ReadVector() { JsonVector ret = new JsonVector(); while (true) { JsonScannerToken token = GetToken(); if (token.Type == eTokenType.FechaColchetes) { return(ret); } PushToken(token); ret.Add(InternalReadValue()); token = GetToken(); if (token.Type == eTokenType.FechaColchetes) { return(ret); } if (token.Type == eTokenType.Virgula) { continue; } throw ReturnError("Item de vetor inválido"); } }
private JsonScannerToken GetToken() { if (m_pushToken != null) { JsonScannerToken ret = m_pushToken; m_pushToken = null; return(ret); } return(m_Scanner.GetToken()); }
public JsonScannerToken GetToken() { if (m_pushToken != null) { JsonScannerToken ret = m_pushToken; m_pushToken = null; return(ret); } LastToken = Tokens[TokenIndex++]; return(LastToken); }
protected object InternalReadValue() { JsonScannerToken token = GetToken(); if (token.Type == eTokenType.Numeric) { return(Convert.ToDecimal(token.Conteudo.ToString())); } if (token.Type == eTokenType.String) { return(token.Conteudo.ToString()); } if (token.Type == eTokenType.AbreChaves) { return(InternalReadObject()); } if (token.Type == eTokenType.AbreColchetes) { return(ReadVector()); } if (token.Type == eTokenType.Ident) { string identValue = token.Conteudo.ToString(); if (identValue == "null") { return(null); } if (identValue == "true") { return(true); } if (identValue == "false") { return(false); } } throw ReturnError("Valor inválido"); }
public object ReadValor() { JsonScannerToken token = GetToken(); if (token.Type == eTokenType.Numeric) { return(Convert.ToDecimal(token.Conteudo.ToString())); } if (token.Type == eTokenType.String) { return(token.Conteudo.ToString()); } if (token.Type == eTokenType.AbreChaves) { return(ReadObjeto()); } if (token.Type == eTokenType.AbreColchetes) { return(ReadVetor()); } if (token.Type == eTokenType.Ident) { string nomeIdent = token.Conteudo.ToString(); if (nomeIdent == "null") { return(null); } if (nomeIdent == "true") { return(true); } if (nomeIdent == "false") { return(false); } } return(ReturnError("Valor inválido")); }
private void buttonScan_Click(object sender, EventArgs e) { JsonScanner scanner = new JsonScanner(); scanner.SetInput(textJson.Text); Debug.WriteLine("---------------------------"); while (true) { JsonScannerToken token = scanner.GetToken(); Debug.WriteLine("Token: {0} (pos {1}, {2})", token, token.NumeroLinha, token.NumeroColuna); if (token.Type == eTokenType.Erro) { Debug.WriteLine("SCAN Error: {0}", token.Mensagem, null); break; } if (token.Type == eTokenType.Eof) { break; } } }
private object ReadObjeto() { dynamic ret = new ExpandoObject(); IDictionary <string, object> objeto = ((IDictionary <String, Object>)ret); while (true) { JsonScannerToken token = GetToken(); if (token.Type == eTokenType.FechaChaves) { return(ret); } if (token.Type == eTokenType.String) { string nome = token.Conteudo.ToString(); token = GetToken(); if (token.Type != eTokenType.DoisPontos) { return(ReturnError("Esperado :")); } object valor = ReadValor(); objeto.Add(nome, valor); token = GetToken(); if (token.Type == eTokenType.FechaChaves) { return(ret); } if (token.Type == eTokenType.Virgula) { continue; } } ReturnError("Par nome/valor inválido"); } }
protected void PushToken(JsonScannerToken token) { m_pushToken = token; }
private void Init() { m_pushToken = null; }
public JsonDynReader() { TokenIndex = 0; m_pushToken = null; }