是否可以通过序列化将属性应用于对象?

时间:2012-10-12 17:19:30

标签: c# asp.net-mvc serialization

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

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

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

1 个答案:

答案 0 :(得分:1)

就我的知识而言,通过包含WCF服务引用,您无法通过代码生成过程将属性传递给客户端。无法在客户端获取属性。

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

enter image description here

这样,您可以在客户端获得Enum with Description属性的副本。如果您尝试更改它,实际上您正在更改Server Enum文件,因为它是一个参考文件,但神奇的是我将在构建过程中编译为客户端项目的一部分。这真是一个很好的解决方法。

希望这会对你有所帮助:)。