检查实际的空值是否传递给wcf中的数据库
问题描述:
默认情况下,参数对象中的所有数据成员值都为空。但如何检查实际的空值是否从客户端传递到我的服务。检查实际的空值是否传递给wcf中的数据库
换句话说,如果客户端实际上向数据成员传递了包括空值的任何值,那么我必须执行一些数据库操作。所以我需要区分客户端传递的默认空值和实际空值。请指教。
答
我不确定这是你问的,但你可以实现这样的东西,为了空检查。
private bool HasNull(object webServiceInput, string[] optionalParameters = null)
{
if (ReferenceEquals(null, webServiceInput))
return false;
if (optionalParameters == null)
optionalParameters = new string[0];
var binding = BindingFlags.Instance | BindingFlags.Public;
var properties = webServiceInput.GetType().GetProperties(binding);
foreach (var property in properties)
{
if (!property.CanRead)
continue;
if (property.PropertyType.IsValueType)
continue;
if (optionalParameters.Contains(property.Name))
continue;
var value = property.GetValue(webServiceInput);
if (ReferenceEquals(null, value))
return false;
}
return true;
}
答
我认为唯一的解决办法是有额外的数据成员如下这个模式:
class Contract
{
[DataMember]
private string _field;
public string Field
{
get {
return _field;
}
set {
_field = value;
FieldSpecified = true;
}
}
[DataMember]
public string FieldSpecified;
}
这是一个XML序列化使用该模式。