这个我真的想不通!(如果可能的话)。我们从 WCF 服务接收产品信息。产品数据合同有一些定义为字符串(但实际上是整数)的成员,但我们希望将它们作为整数处理。
当我将客户端合同中的数据类型从 string 更改为 int 时,我的问题就解决了。但是,有些产品有一个 string.Empty 值,不能反序列化为 int。有没有办法解决?真的不想在反序列化后转换我的结果集......
这个我真的想不通!(如果可能的话)。我们从 WCF 服务接收产品信息。产品数据合同有一些定义为字符串(但实际上是整数)的成员,但我们希望将它们作为整数处理。
当我将客户端合同中的数据类型从 string 更改为 int 时,我的问题就解决了。但是,有些产品有一个 string.Empty 值,不能反序列化为 int。有没有办法解决?真的不想在反序列化后转换我的结果集......
好吧,因为你得到的那些 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
. 如果是null
or string.Empty
,则只返回一个默认值,例如 -1 或 0 或任何适合您的值。
如果它不是空/空,您可以尝试将其转换为 Int,如果成功,则返回该 int - 否则返回另一个指标(再次,选择 -1、0,任何对您有意义的值)。
这样一来,您就不必弄乱 WCF 数据协定,也不必进行繁琐的手动黑客攻击,而且您可以根据需要调整这些额外的属性。
马克