【问题标题】:Is it possible to bring attributes applied to an object through serialization?是否可以通过序列化将属性应用于对象?
【发布时间】:2012-10-03 13:35:28
【问题描述】:

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

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

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

【问题讨论】:

  • 请注意,剥离属性的不是序列化,而是第二个示例中创建代码的代码生成。
  • 哦,我明白了。有趣的。希望不必使用不同的序列化引擎。
  • 如果用户引用了从您的第一个示例编译的程序集,他们将获得属性。在您的情况下,这显然是不可能的,并且可能有某种方法可以让代码生成来保留属性,但我不知道。

标签: c# asp.net-mvc serialization


【解决方案1】:

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

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

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

希望对你有帮助:)

【讨论】:

  • 这是一个非常性感的想法。我一定会记住的。我将把这篇文章打开几个小时,但如果没有其他问题,我会在一天结束前接受这个答案。 :) 谢谢!
  • 您觉得这个答案有帮助吗?
  • 有点!这是一个很好的想法,但我遇到了命名空间问题。由于我们通过具有属性(例如 MyDtoObject.Enum)的 Web 服务传递 DTO 对象,因此它与客户端上的 Enum 具有不同的命名空间。我无法轻松地将一个分配给另一个,所以我退出并查看了其他一些选项,但到目前为止还没有找到解决方案。不过,我接受了帮助!
猜你喜欢
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多