private int ParseValue(int index, string valueName, WrapperObject parentNode) { WrapperType actualValue; if (this.TokenList[index].Contains(".")) { var proposedDouble = this.TokenList[index].Split("."); if (int.TryParse(proposedDouble[0], out _) && int.TryParse(proposedDouble[1], out _)) { actualValue = new WrapperDouble(valueName, double.Parse(this.TokenList[index++])); } else { actualValue = new WrapperString(valueName, this.TokenList[index++]); } } else if (int.TryParse(this.TokenList[index], out _)) { actualValue = new WrapperInt(valueName, int.Parse(this.TokenList[index++])); } else if (this.TokenList[index].ToLower() == "true" || this.TokenList[index].ToLower() == "false") { bool boolVal = bool.Parse(this.TokenList[index++]); actualValue = new WrapperBool(valueName, boolVal); } else if (this.TokenList[index] == "<") { if (valueName.ToLower().Contains("array")) { actualValue = new WrapperArray(valueName, null); index = ParseArray(index, actualValue as WrapperArray); } else { actualValue = new WrapperObject(valueName, null); index = ParseObject(index, actualValue as WrapperObject); } } else { actualValue = new WrapperString(valueName, this.TokenList[index++]); } index = RulesUtility.ValidateToken(this.TokenList[index], "<", "Invalid Token. Need \'<\' for name of value", index); if (valueName.ToLower().Contains("array")) { index = RulesUtility.ValidateToken(this.TokenList[index], $"/{valueName.ToLower()}", $"Invalid Token. Need closing name {valueName} for name of value", index); } else { index = RulesUtility.ValidateToken(this.TokenList[index], $"/{valueName}", $"Invalid Token. Need closing name {valueName} for name of value", index); } index = RulesUtility.ValidateToken(this.TokenList[index], ">", "Invalid Token. Need \'>\' for name of value", index); parentNode.Value.Add(actualValue); return(index); }
private int ParseValue(int index, string valueName, WrapperObject parentNode) { WrapperType actualValue = null; if (this.TokenList[index].Contains("\"")) { index = RulesUtility.ValidateToken(this.TokenList[index], "\"", "Invalid Token. Need first double quote for string value", index); actualValue = new WrapperString(valueName, this.TokenList[index++]); index = RulesUtility.ValidateToken(this.TokenList[index], "\"", "Invalid Token. Need first double quote for string value", index); } else if (this.TokenList[index].Contains(".")) { var proposedDouble = this.TokenList[index].Split("."); if (int.TryParse(proposedDouble[0], out _) && int.TryParse(proposedDouble[1], out _)) { actualValue = new WrapperDouble(valueName, double.Parse(this.TokenList[index++])); } else { throw new Exception("This is an invlid Double Value"); } } else if (int.TryParse(this.TokenList[index], out _)) { actualValue = new WrapperInt(valueName, int.Parse(this.TokenList[index++])); } else if (this.TokenList[index] == "true" || this.TokenList[index] == "false") { bool boolVal = bool.Parse(this.TokenList[index++]); actualValue = new WrapperBool(valueName, boolVal); } else if (this.TokenList[index] == "{") { index++; actualValue = new WrapperObject(valueName, null); index = ParseObject(index, actualValue as WrapperObject); index++; } else if (this.TokenList[index] == "[") { index++; actualValue = new WrapperArray(valueName, null); index = ParseArray(index, actualValue as WrapperArray); index++; } parentNode.Value.Add(actualValue); return(index); }