2009-10-09 132 views
1

我真的無法弄清楚這一個! (如果甚至可能的話)。從WCF服務我們正在接收產品信息。產品數據合同有一些成員被定義爲字符串(但實際上是整數),但我們想要將它們作爲整數處理。WCF:DeSerialize字符串數據庫作爲int

當我將客戶端的契約中的數據類型從字符串更改爲int時,我的問題得到解決。然而,有些產品有一個string.Empty值,它不能被反序列化爲一個int。有沒有辦法解決?真的不希望在反序列化之後轉換我的結果集...

回答

1

那麼,因爲您獲得的DataContract類總是部分類,所以您可以簡單地添加第二個部分類並提供「PropertyAsInt」屬性。

事情是這樣的:

public partial class Product 
{ 
    public int ProductNumberAsInt 
    { 
     get 
     { 
      if(!string.IsNullOrEmpty(ProductNumber)) 
      {  
      int result = -1; 

      if(int.TryParse(ProductNumber, out result) 
       return result; 
      else 
       return -1; 
      } 

      return 0; 
     } 
    } 
} 

所以你只需簡單地定義一個ProductNumberAsInt屬性,它會檢查稱爲ProductNumber基礎字符串屬性。如果它是nullstring.Empty,則返回默認值,例如, -1或0或任何適合你的作品。

如果它不爲空/空,您可以嘗試將它轉換爲Int,如果成功,則返回該int - 否則返回另一個指標(再次,請選擇,-1,0,對您有意義)。

這樣,您不必亂用WCF數據合同,也不用亂用手動黑客,並且可以根據需要調整這些額外屬性。

Marc

+0

他marc,thanx的迅速回復。這確實是我考慮的一個選擇。問題是這些屬性中有三個,我將不得不重寫我的代碼以處理新屬性而不是舊屬性。至於返回值,使它們可以爲空可以解決這個問題。 – Syg 2009-10-09 14:58:02