1

这个我真的想不通!(如果可能的话)。我们从 WCF 服务接收产品信息。产品数据合同有一些定义为字符串(但实际上是整数)的成员,但我们希望将它们作为整数处理。

当我将客户端合同中的数据类型从 string 更改为 int 时,我的问题就解决了。但是,有些产品有一个 string.Empty 值,不能反序列化为 int。有没有办法解决?真的不想在反序列化后转换我的结果集......

4

1 回答 1

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. 如果是nullor string.Empty,则只返回一个默认值,例如 -1 或 0 或任何适合您的值。

如果它不是空/空,您可以尝试将其转换为 Int,如果成功,则返回该 int - 否则返回另一个指标(再次,选择 -1、0,任何对您有意义的值)。

这样一来,您就不必弄乱 WCF 数据协定,也不必进行繁琐的手动黑客攻击,而且您可以根据需要调整这些额外的属性。

马克

于 2009-10-09T14:47:44.827 回答