public Enum ReadEnumerated(string fieldName, System.Type enumType)
{
if (enumType == null) throw new ArgumentNullException("enumType");
Enum value = (Enum)Enum.GetValues(enumType).GetValue(0);
object token = null;
if (!ReadField(fieldName, out token))
{
return value;
}
string literal = token as string;
if (literal == null)
{
return value;
}
int index = literal.LastIndexOf('_');
if (index > 0)
{
int number = Convert.ToInt32(literal.Substring(index + 1), CultureInfo.InvariantCulture);
value = (Enum)Enum.ToObject(enumType, number);
}
else
{
value = (Enum)Enum.Parse(enumType, literal, false);
}
return value;
}