C# C从整数反序列化枚举
是否可以从c中的int反序列化枚举。e、 g.如果我有以下课程: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
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>