WCF:DeSerialize字符串datamember为int

时间:2009-10-09 14:30:07

标签: wcf serialization datacontract

我真的无法想出这一个! (如果它甚至可能)。从WCF服务,我们收到产品信息。产品datacontract有一些成员被定义为字符串(但实际上是整数),但我们希望将它们作为整数处理。

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

1 个答案:

答案 0 :(得分: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或任何适合你的东西。

如果它不是null / empty,你可以尝试将它转换为Int,如果成功,则返回int - 否则返回另一个指示符(再次,选择你的选择,-1,0,对你有意义)

这样,你就不必弄乱WCF数据合同,不需要乱七八糟的手动黑客攻击,你可以根据需要调整这些额外的属性。

马克