Как создать выходной формат Xml или Json из необработанной строки Xml? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь использовать FormatFilter для генерации вывода ответа контроллера «json» или «xml».

Проблема в том, что моей отправной точкой является случайная (правильно сформированная) строка XML.

Я использую DotNet Core 2.2, и это то, что у меня сейчас есть в контроллере:

        [HttpGet("values.{format}"), FormatFilter]
        public ActionResult TestObjectOutput()
        {
            string xml = DynamicXmlRawString();

            XDocument doc = XDocument.Parse(xml);
            string json = JsonConvert.SerializeXNode(doc);
            dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json);

            return Ok(obj);
        }

        public static string DynamicXmlRawString()
        {
            return $@"<Result><DateTime>{DateTime.Now}</DateTime><User><Someone>12345678</Someone></User></Result>";
        }

Выходной ответ для json идет, как и ожидалось.

$ curl -i -X GET http://0.0.0.0:5000/api/values/object.json

{"Result":{"DateTime":"27/04/2019 16:31:27","User":{"Someone":"12345678"}}}

Ответ для xml возвращает HTTP / 1.1 406 Недопустимо

curl -i -X GET http://0.0.0.0:5000/api/values/object.xml

Ошибка сервера:

An error occurred while trying to create an XmlSerializer for the type 'System.Dynamic.ExpandoObject'.

Ожидаемый результат:

<Result><DateTime>27/04/2019 16:40:05</DateTime><User><Someone>12345678</Someone></User></Result>

Есть идеи, как это решить?

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2019

Похоже, я задумался ... проблема решена.

        [HttpGet("values.{format}"), FormatFilter]
        public ActionResult TestObjectOutput()
        {
            string xml = DynamicXmlRawString();

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(xml);

            return Ok(xmlDoc);
        }

        public static string DynamicXmlRawString()
        {
            return $@"<Result><DateTime>{DateTime.Now}</DateTime><User><Someone>12345678</Someone></User></Result>";
        }


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...