C# 未定义枚举&;WPF组合框&;WCF序列化

C# 未定义枚举&;WPF组合框&;WCF序列化,c#,wpf,wcf,enums,combobox,C#,Wpf,Wcf,Enums,Combobox,我在寻找处理WPF和WCF上的枚举字段的通用解决方案时遇到问题,我需要一些帮助。让我们用一个例子来解释: 当创建一个具有性别枚举值[男性,女性]的人时,我会看到三种可能性: 男性为默认值->有两种可能性,但一种是默认值。绑定ComboBox.SelectedValue没有问题,WCF序列化也没有问题,只要不需要:) ((性别)(3))未定义的值是默认值->有两个可能性,但在开始时用户被迫选择一个。ComboBox.SelectedValue正确设置SelectedIndex=-1,但WCF抛出:

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

当创建一个具有性别枚举值[男性,女性]的人时,我会看到三种可能性:

  • 男性为默认值->有两种可能性,但一种是默认值。绑定ComboBox.SelectedValue没有问题,WCF序列化也没有问题,只要不需要:)

  • ((性别)(3))未定义的值是默认值->有两个可能性,但在开始时用户被迫选择一个。ComboBox.SelectedValue正确设置SelectedIndex=-1,但WCF抛出: 枚举值“3”对于类型“Sex”无效,无法序列化。如果类型具有DataContractAttribute属性,请确保存在必要的枚举值,并使用EnumMemberAttribute属性进行标记

  • Sex属性可为空->它是设置性别的可选属性,您甚至可以在选择一个属性后将其取消设置

  • 不幸的是,案例2是最常见的一个,但我们没有看到一个简单的方法来处理它,而不进行如下攻击:

    • 为性定义“未知”值,这个值对于实体无效,我会考虑它是否不是最常见的方案。<李>
    • 将枚举标记为[Flags],以便WCF可以将“男性,女性”编码为未知
    • 用类似于[CombohintunknowNownNew]的东西装饰性财产
    • 设置SelectedIndex=-1,同时在WPF中保持绑定的某些方式

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

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

    到目前为止,我们找到了以下解决方案:

    Sex Sex {get; set;}  //Default Male
    
    Sex? Sex {get; set;}  //Optional field, none is available in the combobox
    
    [NotNullValidator]
    Sex? Sex {get; set;}  //Default is null, so SelectedIndex=-1 and can be sent via WCF, but the combo does not have the 'none' option and once one Sex is selected u can not turn back.  
    

    很抱歉提出了这样一个抽象且难以回答的问题

    您能在这里解释一下您是如何使用WCF的,并提供一些XAML吗?通过WCF发送并在WPF中显示的枚举属性没有任何问题。如果枚举未定义,则显然必须强制用户在序列化之前选择一个值,但必须在开始时写入。您能用一些代码/XAML解释一下吗?由于构建通用解决方案的目的,我们希望能够将不完整的实体发送到服务器,例如,了解该实体是否经过授权,或者哪些操作可用。很难选择一段简单的代码,但要求能够在实体属性本身中编码树描述的解决方案,能够知道用户是否选择了一个jet。到目前为止,我们成功地保持了视图的相同模型,传输到服务器和服务器本身(www.signumframework.com)我们希望保留这一点。通过这种方式,我们在一个地方就有了验证规则。