在.net Core 3.0中将通用C#模型序列化为xml

我正在使用.net core 3.0创建Web API。我想将通用模型序列化为XML。但是默认情况下,它将通用模型仅序列化为JSON

当我尝试将一个简单模型序列化为XML时,它会正确地序列化为XML

根据传递的标头,我想序列化模型。这是我到目前为止所做的:

在startup.cs文件中:

services.AddControllers(options =>{
        options.RespectBrowseracceptheader = true; // false by default
    }).
    AddXmlSerializerFormatters().

下面是代码示例:

我的通用模型:

public class ApiResponseModel<T>
{
    public int ErrorCode { get; set; }
    public string ErrorMessage { get; set; }
    public T Data { get; set; }

    public ApiResponseModel(int errorCode,string errorMessage,T data)
    {
        this.ErrorCode = errorCode;
        this.ErrorMessage = errorMessage;
        this.Data = data;
    }
}

返回数据的操作:

[HttpGet]
public async Task<IactionResult> Get()
{
    IEnumerable<RoleDTO> roleList = null;
    roleList = await _repository.RoleRepository.GetallRolesAsync();
    var data = new ApiResponseModel<IEnumerable<RoleDTO>>(200,"Success",roleList);
    return Ok(data);
}

通过JSON标头将此返回accept响应指定为application/xml

但是,如果我只返回roleList,它将以XML格式给出响应。

[HttpGet]
public async Task<IactionResult> Get()
{
    IEnumerable<RoleDTO> roleList = null;
    roleList = await _repository.RoleRepository.GetallRolesAsync();
    return Ok(roleList);
} 

我也如何获得通用模型的XML响应?

jasoncarbonfree 回答:在.net Core 3.0中将通用C#模型序列化为xml

有两个原因:

  1. 您的ApiResponseModel<T>没有无参数的构造函数。
  2. 您使用的是XmlSerializer的{​​{1}}(而不是XML DataContractSerializer),默认情况下不会使用AddXmlSerializerFormatters()序列化。

要解决此问题,请添加无参数构造函数:

public class ApiResponseModel<T>
{
    public int ErrorCode { get; set; }
    public string ErrorMessage { get; set; }
    public T Data { get; set; }
    public ApiResponseModel() { }       // add a parameterless constructor

    public ApiResponseModel(int errorCode,string errorMessage,T data)
    {
        this.ErrorCode = errorCode;
        this.ErrorMessage = errorMessage;
        this.Data = data;
    }
}

并考虑添加XML IEnumerable<T>格式器以处理DataContractSerializer序列化:

services.AddControllersWithViews(opts =>{
    opts.RespectBrowserAcceptHeader = true;
})
.AddXmlDataContractSerializerFormatters()
.AddXmlSerializerFormatters()
本文链接:https://www.f2er.com/3144780.html

大家都在问