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

Jam*_*hon 11 .net c# xml web-services

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

我正在使用这个问题答案来编写我的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();
Run Code Online (Sandbox Code Playgroud)

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

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

Jam*_*hon 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;
Run Code Online (Sandbox Code Playgroud)

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

  • ...无论如何,XmlDocument都是从XmlNode派生的,所以在使用XPath查询xml或创建XPathNavigators等功能方面没有太多困难. (2认同)

Kev*_*Kev 11

只需返回一个XmlDocument.例如

[WebMethod]
public XmlDocument Quux()
{

}
Run Code Online (Sandbox Code Playgroud)