【问题标题】:Returning an XElement from a web service从 Web 服务返回 XElement
【发布时间】:2008-12-08 14:52:15
【问题描述】:

是否可以从 Web 服务(在 C#/asp.net 中)返回 XElement?

尝试一个返回 XElement 的简单 Web 服务:

[WebMethod]
public XElement DoItXElement()
{
  XElement xe = new XElement("hello",
     new XElement("message", "Hello World")
     );

  return xe;
}

这编译得很好,但是如果你尝试运行它,你会得到 ​​p>

不能在架构的顶层使用通配符。

我在 .net 中找到了this post implying that this is a bug

那么...我可以从 Web 服务返回 XElement 吗?如果有,怎么做?

谢谢。

【问题讨论】:

    标签: asp.net web-services xelement


    【解决方案1】:

    XElement 的序列化方式似乎存在问题,请检查here...

    您可以尝试将 XElement 作为字符串输出,或者按照文章的建议,您可以使用类包装器并将 XElement 放入其中。如果要以通用格式输出数据,您将无法返回字符串。

    【讨论】:

    • 更具规范性 - XElement 的本质是在运行时之前不确定。然而,WebMethod 需要一个确定的根才能开始反序列化。包装是要走的路。
    • 很遗憾,外部链接现在已损坏。
    【解决方案2】:

    我试图避开字符串!

    我可以返回一个 XmlNode(从 XElement 创建),它可以得到我需要的东西 - 客户端上的 XML 块。感谢该链接 - 我将进一步调查 XWrapper...

    【讨论】:

      【解决方案3】:

      奇怪的是,这似乎只有在您尝试查看服务的“发现”部分时才会发生 - 您可以毫无问题地运行该方法......

      【讨论】:

        【解决方案4】:

        返回一个 XmlElement 类型,只需使用此扩展方法将 XElement 转换为 XmlElement:

        [System.Runtime.CompilerServices.Extension()]
        public XmlElement ToXmlElement(XElement value)
        {
            var xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(value.ToString());
            return xmlDoc.DocumentElement;
        }
        

        这似乎运作良好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多