检查实际的空值是否传递给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序列化使用该模式。