C# webservice的字符串中的Null作为string.empty接收

C# webservice的字符串中的Null作为string.empty接收,c#,web-services,null,invoke,C#,Web Services,Null,Invoke,我有一个web服务,它有一个接收和处理对象的方法。对象的属性之一是字符串。此属性的默认值为string.empty 有时我确实希望在该对象上设置null并发送它。但是如果我这样做并检查对象是否在调试模式下接收,我会看到接收到一个空字符串 我试着用两种方法调用webservice,两种方法的结果都是相同的string.empty值 通过从服务引用创建web服务调用对象 通过在web服务代理上调用 有什么办法解决这个问题吗?默认值的要点是,当没有提供任何内容时,将使用默认值。系统无法知道它是否收

我有一个web服务,它有一个接收和处理对象的方法。对象的属性之一是字符串。此属性的默认值为string.empty

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

我试着用两种方法调用webservice,两种方法的结果都是相同的string.empty值

  • 通过从服务引用创建web服务调用对象
  • 通过在web服务代理上调用

有什么办法解决这个问题吗?

默认值的要点是,当没有提供任何内容时,将使用默认值。系统无法知道它是否收到空值,因为您显式地为它提供了空值,还是因为您没有提供值,所以如果您告诉它默认为String.empty,那么当它收到空值时,它就会这样做。如果您确实希望能够传递空值并接收它们,则必须重新考虑使用默认值

但是,这里有一个想法:如果您颠倒string.Empty和null的用法,默认行为是将string.Empty值转换为null,但是有一个数据注释可以防止这种情况:

[DisplayFormat(ConvertEmptyStringToNull = false)]

因此,也许您可以使用null作为默认值,将其传递给string.Empty(如果您现在要传递null),并告诉它通过使用该数据注释让这些内容通过?

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

查看IXMLSerializable或iserializable

如果使用wcf,也可以


由于默认值为String.Empty,很有可能会将任何空值替换为默认值。将default更改为NULL,看看这是否会产生影响