【发布时间】:2020-03-03 13:43:44
【问题描述】:
我有一个包含多个控制器的 Web API,其中一个出于遗留原因返回 XML,而其他所有控制器都返回 JSON。
在 .NET Framework 中,我可以通过访问 HttpControllerSettings.Formatters(通常在用于装饰控制器的属性中)有选择地为单个控制器启用 XML 序列化。
是否可以在 ASP.NET Core 中做同样的事情,即只为单个控制器启用 Xml 序列化?
我发现在 ASP.NET Core 2.1 中启用 Xml 序列化的唯一方法是全局,使用:
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)
它似乎试图为我的“XML”控制器未使用的类型创建一个XmlSerializer。
虽然它不是一个炫技,但我宁愿不创建 XmlSerializer,除非我需要它们。
【问题讨论】:
-
当我将
mymodel响应为 xml 时,它会生成类似您的警告的错误。但是如果我不将模型响应为 xml,它不会收到这样的警告。您能否分享一个示例可以重现您的问题吗? -
@Rena,我正在从另一个控制器中的操作返回一个
ActionResult<MyModel>,该控制器用[Produces("application/json")]装饰。但是返回 XML 的控制器只有返回ActionResult<object>的操作(其中 object 实际上是一个 XmlDocument)。
标签: asp.net-core asp.net-core-2.1 xmlserializer