【问题标题】:Wcf web service, reused type with private setter property and no DataContract/DataMember gets null valuesWcf Web 服务,具有私有 setter 属性的重用类型,并且没有 DataContract/DataMember 获取空值
【发布时间】:2016-08-12 19:11:55
【问题描述】:

我创建了一个在 Winforms UI 中引用的 WCF Web 服务,并且两个项目都引用了一个带有 POCO 的公共类库。

服务引用配置为重用类型,并且一切正常,直到我将其中一个 POCO 中的属性设置器设为私有。当将该 POCO 作为参数从客户端传递到服务器时,该属性变为 null,即使它在客户端上不是 null。

作为一种解决方法,我必须在该特定 POCO 上显式声明 [DataContract][DataMember] 属性以使该属性再次工作。 (其他 POCO - 都具有公共 getter 和 setter - 不需要任何属性)。

有谁知道:

1) 为什么会发生这种情况(即这是一个错误还是记录在案的行为,如果是,原因是什么)?

2) 是否有比使用属性装饰类更简单的解决方法(例如服务上的某些设置等)?

【问题讨论】:

    标签: c# web-services wcf


    【解决方案1】:
    1. 如果数据成员未修饰且不存在数据契约属性,则所有具有公共 get 和公共集的成员都参与序列化。 添加属性时,任何东西都可以参与。 (例如私人领域)more info
    2. 在数据合同中,仅使用公共获取和公共设置。对业务对象应用访问控制等业务规则。

    【讨论】:

    • 我没有意识到 WCF 实际上是从 POCO 中制作 DataContracts,因为我不知道默认情况下“未标记类型”被视为 DataContracts。链接是正确的。
    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多