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; }
}
並定義爲
[OperationContract(Name = "TestMethod")]
void TestMethod(TestObject obj);
如果我有TestMethod的定義爲
public void TestMethod(TestObject obj)
{
Debug.WriteLine(obj.OptionalBooleanField);
Debug.WriteLine(obj.OptionalIntegerField);
Debug.WriteLine(obj.OptionalStringField);
}
我的問題的服務合同的是,如果我做一個SOAP調用TestMethod的,沒有輸入參數指定,OptionalIntegerField和OptionalBooleanField(作爲值類型)被設置爲其默認值(0和false)。我需要確定是否傳遞了一個可選參數。
我的問題是什麼適當的方式來處理這個問題?我正在考慮使我的OptionalIntegerField和OptionalBooleanField爲可空類型,但我不確定這是否是正確的方法。
我同意你的回答是這個特定問題的可接受答案。但是,設置可空類型是解決這個問題的唯一方法嗎?你知道任何其他解決方案嗎? – Learner
您不必使用可爲空的類型,但如果您不需要,那麼您需要一些其他常見的缺少值。您可以使用默認值來表示它缺失,但不允許默認值爲有效值。或者,您可以將自定義序列化添加到您的合同對象,以將缺失值設置爲您選擇的默認「缺失」值。但問題是,你爲什麼想這樣做。如果有一個可以爲空的值類型不適用於你的情況的原因,我建議你就Stack Overflow問一個新的問題。 –