private static object GetEnumFromExistingJToken(Type enumType, JToken existingValue, EnumInfo enumInfo) { switch (existingValue.Type) { case JTokenType.Integer: if (enumInfo.IsSigned) { return(GetEnumFromExistingInteger(enumType, existingValue.ToObject <long>(), enumInfo)); } else { return(GetEnumFromExistingInteger(enumType, existingValue.ToObject <ulong>(), enumInfo)); } case JTokenType.String: return(GetEnumFromExistingString(enumType, existingValue.ToObject <string>())); case JTokenType.Array: return(GetEnumFromExistingStrings(enumType, existingValue.ToObject <string[]>(), enumInfo)); default: throw new InvalidOperationException( $"Cannot construct enum type {enumType} from JToken type: {existingValue.Type}."); } }
private static object GetEnumFromExistingInteger(Type enumType, object existingValue, EnumInfo enumInfo) { if (enumInfo.IsSigned) { return(Enum.ToObject(enumType, Convert.ToInt64(existingValue))); } else { return(Enum.ToObject(enumType, Convert.ToUInt64(existingValue))); } }