我的服务器解决方案中有一个枚举值:
public enum TaskStatus
{
//Description attribute modifies how an Enum's label is displayed when displayed via MVC.
[Description("Draft")]
Draft = 1,
[Description("Being Planned")]
BeingPlanned = 2,
[Description("Waiting For Change")]
WaitingForChange = 3,
[Description("In Progress")]
InProgress = 4,
[Description("Waiting For Customer Information")]
WaitingCustomerInformation = 5,
[Description("Cancelled")]
Cancelled = 6,
[Description("Completed")]
Completed = 7
};
此枚举值被序列化并作为WCF服务引用传递给客户端。
然后我在模型中显示Enum值。但是,我注意到在序列化/反序列化过程中已经删除了Description属性。
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.450")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cormant.com/cswebapi")]
public enum TaskStatus {
/// <remarks/>
Draft,
/// <remarks/>
BeingPlanned,
/// <remarks/>
WaitingForChange,
/// <remarks/>
InProgress,
/// <remarks/>
WaitingCustomerInformation,
/// <remarks/>
Cancelled,
/// <remarks/>
Completed,
}
我仍然希望能够描述我的枚举应该如何显示给最终用户。是否有可能做到这一点?反序列化后可以重新应用属性吗?
答案 0 :(得分:1)
就我的知识而言,通过包含WCF服务引用,您无法通过代码生成过程将属性传递给客户端。无法在客户端获取属性。
在为一个项目工作时,我做了一个非常有效的技巧。我在Client项目中添加了Enum文件作为参考文件(Add as a Link),如下所示:
这样,您可以在客户端获得Enum with Description属性的副本。如果您尝试更改它,实际上您正在更改Server Enum文件,因为它是一个参考文件,但神奇的是我将在构建过程中编译为客户端项目的一部分。这真是一个很好的解决方法。
希望这会对你有所帮助:)。