У меня есть веб-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, кроме случаев, когда они мне нужны.