0
WCFサービスにオプションのパラメータが渡されたかどうかを確認しようとしています。たとえば、次のように定義された単純な入力オブジェクトがあるとします。 オプションパラメータがWCF SOAPサービスで渡されたかどうかを確認
[DataContract]
public class TestObject
{
[DataMember(IsRequired=false)]
public int OptionalIntegerField { get; set; }
[DataMember(IsRequired = false)]
public bool OptionalBooleanField { get; set; }
[DataMember(IsRequired = false)]
public string OptionalStringField { get; set; }
}
そして、私はのtestMethod
public void TestMethod(TestObject obj)
{
Debug.WriteLine(obj.OptionalBooleanField);
Debug.WriteLine(obj.OptionalIntegerField);
Debug.WriteLine(obj.OptionalStringField);
}
私の問題として定義している場合
[OperationContract(Name = "TestMethod")]
void TestMethod(TestObject obj);
として定義されたサービス契約は、私がいない入力パラメータでのtestMethodにSOAP呼び出しを行う場合、指定ということです、OptionalIntegerFieldとOptionalBooleanField(値型)はデフォルト値(0とfalse)に設定されています。オプションのパラメータが渡されたかどうかを判断する必要があります。
私の質問はこれに対処する適切な方法は何ですか?私はOptionalIntegerFieldとOptionalBooleanFieldのnull可能な型を作ることを考えていましたが、それが正しいアプローチであるかどうかはわかりません。
私はあなたの回答がこの特定の質問に対する許容可能な回答であることに同意します。しかし、null可能な型を作ることは、このような問題に対する唯一の解決策ですか?あなたは他の解決策を知っていますか? – Learner
null可能な型は使用する必要はありませんが、そうでない場合は、欠損値の他の一般的な指定が必要です。デフォルト値を使用して欠落している可能性がありますが、デフォルト値を有効な値として使用できなくなります。また、契約オブジェクトにカスタムシリアル化を追加して、不足している値をデフォルトの「不足」値に設定することもできます。しかし、あなたがそれをやりたいのはなぜだろう。あなたの状況でnull値の型がうまくいかない理由があるなら、スタックオーバーフローに関する新しい質問をすることをお勧めします。 –