デフォルトでは、wcfサービスへのパラメータオブジェクトのすべてのデータメンバー値はnullになります。しかし、実際のnull値がクライアントから私のサービスに渡されたかどうかをチェックする方法。実際のNULL値がwcfのdatamemberに渡されたかどうかを確認します
つまり、クライアントが実際に値を含む値をdatamembersに渡した場合、DB操作を行う必要があります。だから私はデフォルトのヌル値とクライアントが渡した実際のヌル値を区別する必要があります。ご意見をお聞かせください。
デフォルトでは、wcfサービスへのパラメータオブジェクトのすべてのデータメンバー値はnullになります。しかし、実際のnull値がクライアントから私のサービスに渡されたかどうかをチェックする方法。実際のNULL値がwcfのdatamemberに渡されたかどうかを確認します
つまり、クライアントが実際に値を含む値をdatamembersに渡した場合、DB操作を行う必要があります。だから私はデフォルトのヌル値とクライアントが渡した実際のヌル値を区別する必要があります。ご意見をお聞かせください。
これはあなたが尋ねたものですが、nullチェックをするためにこれを実装できます。
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シリアル化を使用している模様です。