从请求中省略的WCF字符串数据成员默认为NULL而不是string . empty

本文关键字:NULL empty string 默认 数据成员 中省 请求 字符串 WCF | 更新日期: 2023-09-27 17:50:54

我定义了以下数据成员,作为WCF方法从客户机传递到服务器的数据契约的一部分。该数据契约在服务器端使用;客户端是第三方供应商,他们很可能甚至不使用WCF,而是使用Java客户端,等等。这是一个SOAP服务

[DataMember(Name = "PhoneType", IsRequired = false)]
public string PhoneType { get; set; }

我认为当设置了IsRequired = false时,这意味着您可以完全忽略SOAP请求中的元素,并且PhoneType的值将默认为String.Empty。然而,这并没有发生。

我意识到这一点,当我使用lead.PhoneType.Equals(somestring)和击中一个异常,因为lead.PhoneType是一个空引用。当然,简单的修复方法是首先检查NULL,但是为什么它首先是NULL呢?我发现,如果在SOAP请求中包含<ns:PhoneType />,那么lead.PhoneType将被设置为String.Empty,但是如果从请求中完全排除该元素,那么lead.PhoneType将为空。不应该默认为String.Empty吗?我是否误解了WCF如何处理不包括在请求中的可选数据成员?

从请求中省略的WCF字符串数据成员默认为NULL而不是string . empty

如果一个字符串变量被声明但没有被设置,它将是null而不是string. empty。这就是语言的工作方式。

在。net中,字符串是引用类型而不是值类型,因此没有默认值。如果没有默认值,该值为空。