2013-01-03 20 views
0

我正在實施WCF/Soap服務操作,並且已經定義了幾個不需要的數據合同成員(IsRequired = false)。C#.Net如何確定是否提供了可以爲空的DataMember值

我的問題涉及以下兩種情形......

  • 客戶的合同元素提供一個空值(i:無=「真」)
  • 客戶端不提供可選元素(即他們給我一個部分合同)

這個問題對於複雜和可空的基元類型都是重要的。從我可以確定的.Net序列化程序在兩種情況下都返回null,所以我的問題是,任何人都可以推薦一種方法來確定是否在SOAP請求中提供了可選參數?

回答

0

一種解決方法是在數據合同中添加布爾型MemberSupplied類型成員。例如:

[DataContract] 
public class EmployeeSearchParams 
{ 
    [DataMember] 
    public Employee Manager {get; set;} 

    [DataMember] 
    public bool ManagerSupplied {get; set;} 
} 
+0

感謝您的解決方法,我已經在另一個線程上看到了與另一個問題有關的建議。如有必要,我可以使用這種方法,但如果可能的話,我寧願避免它,因爲它有點笨重。如果我能夠避免這個問題,我不願意改變我的合同來克服這個問題。在昨天與一位同事交談時,Java提供了一個更清晰的解決方案,即序列化器提供反序列化的對象以及原始請求的包裝器,該原始請求提供屬性以確定是否提供了可選元素。 – Jonna

+0

@Jon那也是我對這種方法的初始感覺,但儘管我稱之爲_workaround_,我開始接受這是_cleaner_解決方案。在我看來,處理服務器端的原始SOAP變得更加複雜。還要考慮客戶端。如果它是一個簡單的WCF客戶端,客戶端將無法選擇是否通過_call-by-call_發送null或忽略該成員。 –

相關問題