2

我在我们的服务器解决方案中有一个枚举值:

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,
}

我仍然希望能够描述我的枚举应该如何显示给最终用户。是否有可能做到这一点?反序列化后可以重新应用属性吗?

4

1 回答 1

1

据我所知,您不能通过包含 WCF 服务参考的代码生成过程将属性传输给客户端。无法在客户端获取属性。

在为一个项目工作时,我做了一个非常有效的技巧。我在 Client 项目中将该 Enum 文件添加为参考文件(添加为链接),如下所示:

在此处输入图像描述

这样,您可以在客户端拥有带有 Description 属性的 Enum 副本。如果您尝试更改它,您实际上是在更改服务器枚举文件,因为它是一个参考文件,但神奇的是我将在构建过程中作为您的客户端项目的一部分进行编译。这确实是一个很好的解决方法。

希望对你有帮助 :)

于 2012-10-12T17:33:21.187 回答