WCF根据需要标记所有值类型数据成员

时间:2017-06-28 21:35:43

标签: c# wcf deserialization datacontractserializer wcf-extensions

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

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

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

[DataMember(IsRequired = true)]

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

其他信息:

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

为了参考我希望找到的内容,当我将类似的解决方案应用于基于JsonSerializer的WebAPI时,我有一个全局配置的钩子,这使我可以定义我的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;
}

0 个答案:

没有答案