我在WCF服务的上下文中。我正在尝试验证我的客户是否向我发送了有效合同。
在我的公司,我们有数百份数据合同。对于我们来说,除了Nullable<T>
之外,所有值类型都应该在请求消息中存在(否则我们希望将它们显式地包装在Nullable<T>
中)。
我知道我可以根据需要标记我的数据成员:
[DataMember(IsRequired = true)]
但对于值类型,我想找到一种方法来为服务而不是每个数据成员全局定义它。什么是正确的WCF可扩展性点来实现它?
其他信息:
我遇到了IDispatchMessageInspector
和IDispatchMessageFormatter
,但这些只会让我处理整个邮件。是否有更好的可扩展性点,其中属性已按名称映射到目标数据成员,但尚未实例化为.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;
}