从Web服务返回XElement

时间:2008-12-08 14:52:16

标签: asp.net web-services xelement

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

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

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

  return xe;
}

这个编译很好,但是如果你尝试运行它就会得到

Cannot use wildcards at the top level of a schema.

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

那么......我可以从Web服务返回XElement吗?如果是这样,怎么样?

感谢。

4 个答案:

答案 0 :(得分:5)

XElement如何序列化似乎存在问题,请检查here ...

您可以尝试将XElement作为字符串进行尝试,或者文章建议您只需使用类包装器并将XElement放入其中。如果要点是以通用格式输出数据,那么你将无法返回一个字符串。

答案 1 :(得分:3)

我试图避开字符串!

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

这似乎运作良好。