2009-10-09 133 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