Можно определить статического конструктора для класса, который проверит, что тип T является перечислением, и выдайте исключение, если это не. Это - метод, упомянутый Jeffery Richter в его книжном CLR через C#.
internal sealed class GenericTypeThatRequiresAnEnum<T> {
static GenericTypeThatRequiresAnEnum() {
if (!typeof(T).IsEnum) {
throw new ArgumentException("T must be an enumerated type");
}
}
}
Тогда в методе синтаксического анализа, можно просто использовать Перечисление. Синтаксический анализ (typeof (T), вход, верный) для преобразования от строки до перечисления. Последний истинный параметр для того, чтобы игнорировать регистр входа.
У меня были подобные проблемы. Оказывается столбцом в DB, который хранил сериализированный массив, имел сопоставление: latin1_swedish_ci
я изменил сопоставление сериализированного столбца данных к: utf8_bin
и re-svaed данные и вуаля - проблема решена.