C# десериализация перечислений из целых чисел

Можно ли десериализовать перечисление из целого числа в С#. например Если у меня есть следующий класс:

class Employee
{
   public string Name { get; set;}
   public int EmployeeTypeID { get; set;}
}

Я могу легко создать его из XML

   <Employee>
       <Name>Joe Bloggs</Name>
       <EmployeeTypeID>1</EmployeeTypeID>
   </Employee>

, используя что-то вроде этого:

Employee employee = (Employee)new XmlSerializer(typeof(Employee)).Deserialize(XmlReader);

С очень небольшими усилиями это позволяет мне использовать одну общую службу, которую я могу использовать для всех объектов базы данных. вводя команду select, строку подключения и тип и извлекая массив объектов без необходимости дальнейшего сопоставления. Однако я оторвался от перечислений. Предположим теперь, что вместо целого числа EmployeeType является перечислением:

public enum EmployeeTypeEnum
{
   Admin = 1,
   Sales = 2
}

, поэтому мой класс становится следующим:

class Employee
{
   public string Name { get; set;}
   public EmployeeTypeEnum EmployeeTypeID { get; set;}
}

Могу ли я использовать тот же XML и заставить С# распознавать, что значение int для EmployeeTypeID в xml должно соответствовать значению int для перечисление? Есть и другие похожие вопросы, но ни один из них не имеет удовлетворительного ответа, они довольно старые и требуют массовых изменений в коде. Я надеюсь на лучшее решение...

В качестве возможного отдельного примечания (и немного в ожидании некоторых ответов), лучше ли избегать использования перечислений для этой практики? Должен ли я использовать пары ключ-значение? Я бы всегда использовал пары ключ-значение (или подобные), если бы были изменения, но в этом случае EmployeeType фиксирован и никогда не изменится.

13
задан GarethD 30 March 2012 в 13:57
поделиться