c# - 未定义的枚举 & WPF ComboBox & WCF 序列化

标签 c# wpf wcf enums combobox

我在寻找处理 WPF 和 WCF 上的枚举字段的通用解决方案时遇到问题,我需要一点帮助。让我们用一个例子来解释:

当创建一个具有 Sex 枚举值 [Male, Female] 的人时,我看到三种可能性:

  1. 默认为男性 -> 有两种可能性,但一种是默认。绑定(bind) ComboBox.SelectedValue 没有问题,WCF 序列化也没有问题,只要没有女性感到被冒犯:)

  2. ((Sex)(3)) Undefined value is default -> 有两种可能性,但开始用户被迫选择一种。 ComboBox.SelectedValue 正确设置 SelectedIndex = -1,但 WCF 抛出: 枚举值“3”对于类型“Sex”无效,无法序列化。如果类型具有 DataContractAttribute 属性,请确保存在必要的枚举值并用 EnumMemberAttribute 属性标记。

  3. Sex 属性可以为空 -> 设置 Sex 是可选的,您甚至可以在选择一个后取消设置。

不幸的是,情况 2 是最常见的情况,但我们没有找到一种简单的方法来处理它,而无需像这样进行黑客攻击:

  • 为 Sex 定义“Unknown”值,此值对实体无效,我会考虑它是否不是最常见的情况。
  • 将枚举标记为 [Flags],以便 WCF 可以将“Male,Female”编码为未知。
  • 用 [ComboHintUnkwnownOnNew] 之类的东西装饰性属性。
  • 设置 SelectedIndex=-1,同时保持绑定(bind)在 WPF 中的某种方式。

我知道这是一个思想设计决策,而不是具体问题,但我希望得到一些帮助。

最佳答案

如何只为 View 定义客户端枚举(-1 表示未定义),然后根据所选的性别创建适当的 WCF 代理枚举,然后将其发送到服务。所以不要直接数据绑定(bind)到 WCF 代理类。创建仅客户端模型并转换为有效实体(WCF 代理类)是非常有效的。您可以使用 automapper 之类的工具轻松完成此操作。

关于c# - 未定义的枚举 & WPF ComboBox & WCF 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3759541/

相关文章:

c# - Windows 和 Mono 之间的 DateTime 差异,以及 log4net remote appender

c# - .net 类 xml 属性创建多个命名空间

c# - RichTextBox - UI 调整大小导致巨大的 CPU 负载

c# - MVVM - 在 View 中显示来自多个模型实体的消息

c# - WCF - 已知类型的对象 -> 可互操作?

c# - 使用 WCF Web 服务发送 1 个包含 100 万个整数的数组等于大超时?

c# - 在这种情况下我应该抛出哪个 .Net 2.0 异常?

c# - 如何加粗标签的一部分?

wcf - 带有 WCF 示例的工作流 4.0

c# - Assembly.CreateInstance 和安全