Я пытаюсь использовать 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>
Есть идеи, как это решить?
Спасибо