在.NET(C#)Web服务中原生地返回XML?

时间:2009-01-30 16:44:04

标签: c# .net xml web-services

我意识到.NET中的SOAP webservices返回Web方法返回的任何对象的XML表示,但是如果我想在XML中返回数据格式,那么存储它的最佳对象是什么?

我正在使用answerthis question来编写我的XML,这里是代码:

XmlWriter writer = XmlWriter.Create(pathToOutput);
writer.WriteStartDocument();
writer.WriteStartElement("People");

writer.WriteStartElement("Person");
writer.WriteAttributeString("Name", "Nick");
writer.WriteEndElement();

writer.WriteStartElement("Person");
writer.WriteStartAttribute("Name");
writer.WriteValue("Nick");
writer.WriteEndAttribute();
writer.WriteEndElement();

writer.WriteEndElement();
writer.WriteEndDocument();

writer.Flush();

现在我可以将此输出作为字符串返回到我的调用webmethod,但它显示为<string> XML HERE </string>,无论如何只返回完整的xml?

请在您的回答中,举例说明如何将所述对象与XmlWriter或其他内部对象一起使用(如果您认为XmlWriter是一个糟糕的选择)。 System.Xml包(命名空间)有很多对象,但是我无法找到关于如何一起使用这些对象的正确文档,或者在什么情况下使用什么。

4 个答案:

答案 0 :(得分:14)

这就是我最终做到的方式;

StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb, settings);

writer.WriteStartDocument();
writer.WriteStartElement("People");

writer.WriteStartElement("Person");
writer.WriteAttributeString("Name", "Nick");
writer.WriteEndElement();

writer.WriteStartElement("Person");
writer.WriteStartAttribute("Name");
writer.WriteValue("Nick");
writer.WriteEndAttribute();
writer.WriteEndElement();

writer.WriteEndElement();
writer.WriteEndDocument();

writer.Flush();

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(sb.ToString());
return xmlDocument;

可能不是最好的方法,但似乎有效。如果您有更好的方法,请告诉我。感谢。

答案 1 :(得分:11)

只需返回一个XmlDocument。 e.g。

[WebMethod]
public XmlDocument Quux()
{

}

答案 2 :(得分:1)

XmlElement,而不是XmlDocument。

Return an XmlElement

答案 3 :(得分:0)

你可以有一个代表你的XML的类并返回该类,或者在XMLNode中返回你的xml