Как я буду конвертировать значение в StringWriter в формат XML.?

1

Я написал Сервис, и мне нужен тип возврата как n XML, который я передам клиенту. У меня есть значения в строковом писателе как - <newdataset> <table> <Slno>1</Slno></table><Name>Andrew</Name><table><Slno>2</Slno><name>Trisha</name></table></newdataset>

То, что мне нужно вернуть, - это правильный формат XML от службы к клиенту.

PS - У него должен быть заголовок, похожий на все XML файлы - например: < ?xml version="1.0" standalone="yes"?>

Благодаря,

Nayan

  • 0
    Какой вид сервиса вы написали и как он общается с клиентом? Если это WCF, он сгенерирует WSDL, который может быть использован клиентами, и вернет правильный SOAP-ответ из коробки.
  • 0
    Уважаемый Бен Робинсон! Мы написали базовую услугу WCF. Мы получили значение в Datatable. Проблема в том, что мы не можем вернуть значение в форме XML клиентскому приложению. Мы используем BasicHttp Binding.
Показать ещё 7 комментариев
Теги:
wcf

1 ответ

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

Используйте перегрузку DataTable.WriteXml(XmlWriter). Затем при создании XmlWriter вы можете передать XmlWriterSettings с необходимыми параметрами форматирования, включая настройки settings.OmitXmlDeclaration = false (что фактически является значением по умолчанию). Таким образом:

    public static string ToXml(this DataTable dt)
    {
        using (var textWriter = new StringWriter())
        {
            var settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = "    ";
            // settings.OmitXmlDeclaration = false; not necessary since this is the default anyway.
            using (var xmlWriter = XmlWriter.Create(textWriter, settings))
            {
                dt.WriteXml(xmlWriter);
                return textWriter.ToString();
            }
        }
    }

Таким образом, получается выход:

<?xml version="1.0" encoding="utf-16"?>
<newdataset>
    <Name>Andrew</Name>
    <table>
        <Slno>1</Slno>
    </table>
    <table>
        <Slno>2</Slno>
        <name>Trisha</name>
    </table>
</newdataset>

То же самое будет работать и с DataSet если он у вас есть. (По непонятным мне WriteXml(TextWriter) перегрузка WriteXml(TextWriter) пропускает декларацию XML.)

Ещё вопросы

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