是否可以从c#中的int反序列化枚举.例如,如果我有以下课程:
class Employee
{
public string Name { get; set;}
public int EmployeeTypeID { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我可以轻松地从XML创建它
<Employee>
<Name>Joe Bloggs</Name>
<EmployeeTypeID>1</EmployeeTypeID>
</Employee>
Run Code Online (Sandbox Code Playgroud)
使用这样的东西:
Employee employee = (Employee)new XmlSerializer(typeof(Employee)).Deserialize(XmlReader);
Run Code Online (Sandbox Code Playgroud)
由于涉及的工作非常少,这使我可以使用一个通用服务,通过将select命令,连接字符串和类型输入到并检索对象数组而无需进一步映射,我可以将其用于所有数据库对象.但是我已经忘记了枚举.假设现在而不是整数EmployeeType是一个枚举:
public enum EmployeeTypeEnum
{
Admin = 1,
Sales = 2
}
Run Code Online (Sandbox Code Playgroud)
所以我的班级成为:
class Employee
{
public string Name { get; set;}
public EmployeeTypeEnum EmployeeTypeID { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用相同的XML并使c#认识到xml中EmployeeTypeID的int值应该与enum的int值相对应吗?还有其他类似的问题,但没有一个非常令人满意的答案是相当陈旧的,并涉及批量更改代码.我希望有更好的解决方案......
作为一个可能的单独注释(并略微预期一些响应),使用枚举最好避免这种做法?我应该使用键值对吗?如果可能存在更改,我将始终使用键值对(或类似值),但在这种情况下,EmployeeType是固定的,永远不会更改.
我希望通过一个Web服务返回以下类,该服务包含一个枚举类型作为其成员之一.
[Serializable, XmlRoot("GeoCoordinate")]
public class GeoCoordinate
{
public enum AccuracyLevel
{
Unknown = 0,
Country = 1,
Region = 2,
SubRegion = 3,
Town = 4,
PostalCode = 5,
Street = 6,
Intersection = 7,
Address = 8,
Premise = 9
}
private AccuracyLevel _accuracy;
// ... more members
public AccuracyLevel Accuracy
{
get { return _accuracy; }
set { _accuracy = value;}
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但会以下列形式返回结果:
<!-- ... -->
<Accuracy>Unknown or Country or Region or SubRegion or Town or
PostalCode …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何将枚举值序列化为int?
大家好!
我想知道是否有办法强制将枚举值序列化为整数值,而不是其字符串表示形式.
将您置于上下文中:我们在一个严重依赖Web服务的Web应用程序中使用所有请求标头的单个基类,与请求类型无关.
我想在标题中添加一个Result字段,因此我们可以将提示传递回调用应用程序,以了解操作在Web服务端的运行方式.我们已经有一个枚举声明,但由于我们有遗留应用程序调用那些可能不知道这些枚举的Web服务,我想将这些值序列化为整数.
我们已经不得不通过使用[XmlElement(ElementName ="string representationOfAttributeName")]减少这些头的长度,因为我们偶尔会超过IE最大URL长度,我想知道是否有类似的属性来强制序列化枚举值为整数.
有没有人听说过这样的属性?
一如既往,感谢Pascal的帮助