C# C从整数反序列化枚举

C# C从整数反序列化枚举,c#,.net,enums,deserialization,C#,.net,Enums,Deserialization,是否可以从c中的int反序列化枚举。e、 g.如果我有以下课程: class Employee { public string Name { get; set;} public int EmployeeTypeID { get; set;} } 我可以很容易地从XML创建它 <Employee> <Name>Joe Bloggs</Name> <EmployeeTypeID>1</Employe

是否可以从c中的int反序列化枚举。e、 g.如果我有以下课程:

class Employee
{
   public string Name { get; set;}
   public int EmployeeTypeID { get; set;}
}
我可以很容易地从XML创建它

   <Employee>
       <Name>Joe Bloggs</Name>
       <EmployeeTypeID>1</EmployeeTypeID>
   </Employee>
由于所涉及的工作非常少,这允许我使用一个通用服务,通过将select命令、连接字符串和类型输入并检索对象数组,我可以将该服务用于所有数据库对象,而无需进一步映射。然而,我已经与枚举脱钩。假设现在不是整数EmployeeType而是枚举:

public enum EmployeeTypeEnum
{
   Admin = 1,
   Sales = 2
}
所以我的班级变成:

class Employee
{
   public string Name { get; set;}
   public EmployeeTypeEnum EmployeeTypeID { get; set;}
}
我可以使用相同的XML并让c识别XML中EmployeeTypeID的int值应该与枚举的int值相对应吗?还有其他类似的问题,但没有一个答案非常令人满意,而且都是很老的问题,涉及到对代码的大量更改。我希望有更好的解决办法

作为一个可能的单独注意事项,稍微考虑到一些响应,是否最好避免使用枚举?我应该使用键值对吗?如果可能会发生更改,我将始终使用键值对或类似项,但在本例中,EmployeeType是固定的,永远不会更改

理论上=我还没有尝试过,将XmlEnum属性添加到枚举值应该可以做到:

public enum EmployeeTypeEnum 
{ 
    [XmlEnum("1")] Admin = 1, 
    [XmlEnum("2")] Sales = 2 
} 
这告诉XmlSerializer,EmployeeTypeEnum.Admin的值将被序列化为字符串1,反之亦然,这正是您所需要的


关于你的旁注:我不认为在这里使用枚举是一个问题。如果数据库中的值是整数并具有固定的含义,则枚举是一个很好的解决方案,此外,还可以作为数据库值的文档。

如果xml采用这种格式:

<Employee>
  <Name>Shiv</Name>
  <EmployeeTypeID>Sales</EmployeeTypeID>
</Employee>
然后可以在xml文件中使用整数值,它们将自动映射到枚举


就我个人而言,我更喜欢在这种情况下使用枚举。即使枚举中的项目可能会随着时间的推移而增加,我还是更喜欢使用枚举。事实上,这样的枚举是从数据库生成的代码,所以在代码中,您使用ID的可读性不会太高。

在xml文件中,使用命名常量代替整数值。它会很好用的

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

+1-我遇到的一个问题,我无法证明它有多大用处,但我期待着看到答案。有帮助吗?或者?@Bridge是的,这确实有很大帮助,我忙于搜索我错过了那篇文章的反序列化枚举。
    public enum EmployeeTypeEnum
{
    [XmlEnum("1")]
    Admin = 1,
    [XmlEnum("2")]
    Sales = 2
}
<Employee>
       <Name>Joe Bloggs</Name>
       <EmployeeTypeID>Admin</EmployeeTypeID>
</Employee>