Вернуть XML в веб-сервис .NET (C #)? - PullRequest
11 голосов
/ 30 января 2009

Я понимаю, что веб-сервисы SOAP в .NET возвращают 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();

Теперь я могу вернуть этот вывод в виде строки в мой вызывающий веб-метод, но он отображается как <string> XML HERE </string>, есть ли в любом случае просто вернуть полный XML?

Пожалуйста, в своем ответе приведите пример использования указанного объекта либо с XmlWriter, либо с другим внутренним объектом (если вы считаете XmlWriter плохим выбором). Пакет System.Xml (пространство имен) содержит много объектов, но я не смог найти приличную документацию о том, как использовать объекты вместе или что использовать для каких ситуаций.

Ответы [ 4 ]

14 голосов
/ 30 января 2009

Вот как я это сделал;

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;

Возможно, это не лучший метод, но, похоже, он работает. Дайте мне знать, если у вас есть лучший метод. Спасибо.

11 голосов
/ 30 января 2009

Просто верните XmlDocument. например,

[WebMethod]
public XmlDocument Quux()
{

}
1 голос
/ 27 февраля 2009

XmlElement, а не XmlDocument.

Вернуть XmlElement .

0 голосов
/ 30 января 2009

вы можете иметь класс, который представляет ваш XML и возвращать этот класс, или также возвращать ваш XML внутри XMLNode

...