Возможно ли в ASP. NET Core включить XmlSerialization для одного контроллера - PullRequest
0 голосов
/ 03 марта 2020

У меня есть веб-API, который имеет несколько контроллеров, один из которых возвращает XML по устаревшим причинам, в то время как все остальные возвращают JSON.

В. NET Framework, я могу выборочно включить XML сериализация для одного контроллера путем доступа к HttpControllerSettings.Formatters (обычно в атрибуте, используемом для украшения контроллера).

Можно ли сделать то же самое в ASP. NET Core, т. Е. Включить сериализацию Xml только для одного контроллера?

Единственный найденный мной способ включить Xml сериализация в ASP. NET Core 2.1 используется глобально, с использованием:

services.AddMvc()
     .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
     .AddXmlSerializerFormatters();

Это работает нормально, но имеет побочный эффект, который я считаю нежелательным: при запуске приложения в Visual Studio я вижу след предупреждения от XmlSerializerOutputFormatter что-то вроде:

Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter:Warning: An error occurred while trying to create an XmlSerializer for the type 'MyApp.MyModel'.

System.InvalidOperationException: There was an error reflecting type 'MyApp.MyModel'. ---> System.InvalidOperationException: Cannot serialize member ... see inner exception for more details. ---> System.NotSupportedException: Cannot serialize ... because it is an interface.
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.StructModel.CheckSupportedMember(TypeDesc typeDesc, MemberInfo member, Type type)
   ...
   at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
   at System.Xml.Serialization.XmlSerializer..ctor(Type type)
   at Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CreateSerializer(Type type)

Кажется, он пытается создать XmlSerializer для типа, который не используется моим "XML "controller.

Несмотря на то, что это не showtopper, я бы предпочел не создавать XmlSerializer, кроме случаев, когда они мне нужны.

...