Вернуть XML в веб-сервис .NET (C #)?

10

Я понимаю, что веб-службы 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 в мой вызывающий веб-метод, но он отображается как <string> XML HERE </string>, так или иначе просто вернуть полный xml?

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

Теги:
web-services

4 ответа

13
Лучший ответ

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

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;

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

  • 0
    Это именно то, как это сделать.
  • 1
    Возможно, вы захотите заключить ваш XmlWriter в оператор using: using (XmlWriter writer = XmlWriter.Create (sb, settings)) {build xml и return xmldocument}
Показать ещё 9 комментариев
11

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

[WebMethod]
public XmlDocument Quux()
{

}
  • 0
    Да, я изучал это, но я не понимаю, как XmlWriter взаимодействует с XmlDocument.
  • 0
    Это сбой системы, ваш ответ был не тем, что я искал (хотя это был мой провал из-за того, что я не достаточно ясен в своем вопросе, который я исправляю), поэтому я проголосовал против. Но я вижу, что вы активно пытаетесь помочь, поэтому я убрал голосование против. Система нуждается в способе сказать ...
Показать ещё 1 комментарий
1

XmlElement, а не XmlDocument.

Вернуть XmlElement.

  • 0
    В чем выгода?
  • 0
    Дайте понять, что вы возвращаете фрагмент, а не полный документ. Там нет декларации, например. и так далее.
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню