【问题标题】:WCF: DeSerialize string datamember as intWCF:将字符串数据成员反序列化为 int
【发布时间】:2009-10-09 14:30:06
【问题描述】:

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

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

【问题讨论】:

    标签: wcf serialization datacontract


    【解决方案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/空,您可以尝试将其转换为 Int,如果成功,则返回该 int - 否则返回另一个指示符(再次选择,-1, 0,任何对您有意义的值) .

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

    马克

    【讨论】:

    • 他马克,感谢您的迅速回复。这确实是我考虑过的一个选择。问题是这些属性中的三个,我必须重写我的代码来处理新属性而不是旧属性。至于返回值,使它们可以为空将解决这个问题..
    猜你喜欢
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2021-01-08
    • 1970-01-01
    • 2021-06-07
    • 2020-05-20
    相关资源
    最近更新 更多