【问题标题】:Can a string returned from a .Net web service be null?从 .Net Web 服务返回的字符串可以为空吗?
【发布时间】:2011-12-07 18:12:09
【问题描述】:

我有一个为 .net Web 服务生成的存根,它有几个字符串属性。给定来自 Web 服务的一些响应,这些属性是否可以具有 null 值,或者它们是否总是至少转换为 string.Empty?

如果在 WSDL 中将 'nillable="true"' 属性应用于它们,它们是否只有可能为空?

你看...我只想开始 Trim()'ing 属性的值,而不会出现任何空引用异常。

【问题讨论】:

    标签: .net web-services null asmx


    【解决方案1】:

    它们可以为空。如果使用扩展方法,则可以优雅地处理null 的情况:

    public static string SafeTrim(this string source)
    {
      return (source ?? string.Empty).Trim();
    }
    

    【讨论】:

      【解决方案2】:

      服务器应该将 null 值序列化为 null,而不是 String.Empty,除非有一些额外的逻辑到位。如果您不想编写一堆空检查,请考虑为 trim 制作一个扩展方法。

      public static string TrimOrEmpty(this string val)
      {
          if (val == null) { return string.Empty; }
          return val.Trim();
      }
      

      编辑:或者选择 Anders 更精简的版本。 :)

      【讨论】:

      • 我已将接受的答案从 Anders 更改为您的,因为我意识到我不喜欢在我知道是空的字符串上调用 Trim() 的想法!
      【解决方案3】:

      是的,它可以为空。

      如果标签不存在,它可能为空。

      【讨论】:

      • 那么标签的意义何在?我原以为标签需要存在才能允许为空。
      • 通常,在 XML 上下文中,如果标签存在,则 innerXML 将是字符串的值。如果标签不存在,则结果将为空。
      【解决方案4】:

      是的,如果 WSDL 包含该字段的 'nillable=true' 属性,则来自 Web 服务的字符串可以具有空值。

      【讨论】:

        猜你喜欢
        • 2014-08-24
        • 2014-11-15
        • 1970-01-01
        • 1970-01-01
        • 2019-04-26
        • 1970-01-01
        • 2012-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多