internal bool TryParseValueFromV8String(Session session, LexemV8 lexem, out object value)
{
value = null;
if (!IsPrimitiveType
|| lexem == null
|| lexem.LexemType != LexemV8Type.Brace
|| lexem.ChildLexemList == null
|| lexem.ChildLexemList.Count != 2)
{
return false;
}
string dataValue = lexem.ChildLexemList[1].Data.Trim();
switch (Type)
{
case TypeEnum.Boolean:
value = !(dataValue == "0");
return true;
case TypeEnum.Date:
DateTime dt;
if (DateTime.TryParseExact(dataValue, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt))
{
value = dt;
return true;
}
break;
case TypeEnum.String:
if (dataValue.StartsWith("\""))
{
dataValue = dataValue.Remove(0, 1);
}
if (dataValue.EndsWith("\""))
{
dataValue = dataValue.Remove(dataValue.Length-1, 1);
}
value = dataValue;
return true;
case TypeEnum.Decimal:
decimal dc;
if (decimal.TryParse(dataValue, NumberStyles.Number, CultureInfo.InvariantCulture, out dc))
{
value = dc;
return true;
}
break;
}
return false;
}