Web服务字符串中的空值将作为string.empty接收

时间:2014-04-29 13:21:41

标签: c# web-services null invoke

我有一个带有接收和对象的方法的Web服务。对象的一个​​属性是字符串。此属性的默认值为string.empty。

有时我确实希望在该对象上设置null并发送它。但是,如果我这样做并检查在调试模式下接收到的对象,我会看到已经收到一个空字符串。

我试图以两种方式调用webservice,两者都产生相同的string.empty值;

  • 通过从服务引用创建Web服务调用对象
  • 通过调用Web服务代理

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

默认值的一点是,在没有提供任何内容时将使用它。系统无法知道它是否收到空值,因为您明确地提供了一个空值或者因为您没有提供值,所以如果您告诉它默认为String.empty那么它就会这样做它获得一个空值。如果你希望能够传递空值并让它们像这样接收,你将不得不重新考虑使用默认值。

但是,这里有一个想法:如果你反转string.Empty和null的用法,默认行为是将string.Empty值转换为null,但是有一个数据注释会阻止这个:

[DisplayFormat(ConvertEmptyStringToNull = false)]

所以也许你可以使用null作为默认值,在你现在将它传递给null的情况下传递string.Empty,并告诉它让那些通过使用那个数据注释来完成?

答案 1 :(得分:0)

我相信使用自定义序列化程序可以实现这一目标。默认情况下,空字符串在服务边界上传递为空。

查看ixmlserialisable或iserializable

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable(v=vs.110).aspx

如果使用wcf

http://msdn.microsoft.com/en-us/library/ms731073(v=vs.110).aspx