XmlSerializerInputFormatter 已过时 - ASP.NET Core 2.1

XmlSerializerInputFormatter is obsolete - ASP.NET Core 2.1

我正在使用以下内容接受在我的核心 API 应用程序中序列化的 XML。

services.AddMvc(options =>
{
    // allow xml format for input
    options.InputFormatters.Add(new XmlSerializerInputFormatter());
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

更新到 ASP.NET Core 2.1 后,我收到以下警告:

'XmlSerializerInputFormatter.XmlSerializerInputFormatter()' is obsolete: 'This constructor is obsolete and will be removed in a future version.'

处理这个问题的新方法是什么?

根据 source code,有一个构造函数 not 被标记为 Obsolete:

public XmlSerializerInputFormatter(MvcOptions options)

此构造函数采用 MvcOptions 的实例,因此您可以传递现有的 options 参数:

services.AddMvc(options =>
{
    // allow xml format for input
    options.InputFormatters.Add(new XmlSerializerInputFormatter(options));
}) ...

从 ASP.NET Core 3.0 开始,此构造函数是唯一可用的。那些标记为过时的现在已被删除。

对于 .NET Core 2.2 或更高版本,XmlSerializerInputFormatter 应标记为已弃用。

与我们之前所做的显式定义 XML 序列化程序不同,在 .NET Core 2.2 中,我们可以通过调用 AddXmlSerializerFormatters() 方法简单地添加它们,该方法现在将完成这项工作。阅读 here 它被弃用的原因

这是你可以做到的。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(config =>
    {
        config.RespectBrowserAcceptHeader = true;
        config.ReturnHttpNotAcceptable = true;

        config.OutputFormatters.Add(new CsvOutputFormatter());
    }).AddXmlSerializerFormatters().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}