1

我在 WCF 服务的上下文中。我正在尝试验证我的客户是否向我发送了一份有效的合同。

在我的公司,我们有数百个数据合同。对我们来说,所有值类型,除了 之外Nullable<T>,都应该根据定义要求存在于请求消息中(否则我们希望将它们显式包装在 中Nullable<T>)。

我知道我可以根据需要标记我的数据成员:

[DataMember(IsRequired = true)]

但是对于值类型,我想找到一种方法来为服务而不是每个数据成员全局定义它。为了实现这一目标,正确的 WCF 扩展点是什么?

附加信息:

我遇到了IDispatchMessageInspectorand IDispatchMessageFormatter,但那些只会让我处理整个消息。是否有更好的扩展点,其中属性已经按名称映射到目标数据成员,但尚未实例化为 .NET 类型?或者更好的是,我可以在哪里访问单个数据成员的序列化元数据?

作为我希望找到的参考,当我将类似的解决方案应用于我们JsonSerializer基于ContractResolver. 所以我派生DefaultContractResolver并覆盖:

protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) {
  var property = base.CreateProperty(member, memberSerialization);

  if (IsNotNullableValueType(member)) {
    property.Required = Required.Always;
  }

  return property;
}
4

0 回答 0