我在 WCF 服务的上下文中。我正在尝试验证我的客户是否向我发送了一份有效的合同。
在我的公司,我们有数百个数据合同。对我们来说,所有值类型,除了 之外Nullable<T>
,都应该根据定义要求存在于请求消息中(否则我们希望将它们显式包装在 中Nullable<T>
)。
我知道我可以根据需要标记我的数据成员:
[DataMember(IsRequired = true)]
但是对于值类型,我想找到一种方法来为服务而不是每个数据成员全局定义它。为了实现这一目标,正确的 WCF 扩展点是什么?
附加信息:
我遇到了IDispatchMessageInspector
and 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;
}