Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在.NETCore3.0中将通用c#模型序列化为xml_Asp.net Core_Asp.net Core Webapi_Asp.net Core 3.0 - Fatal编程技术网

Asp.net core 在.NETCore3.0中将通用c#模型序列化为xml

Asp.net core 在.NETCore3.0中将通用c#模型序列化为xml,asp.net-core,asp.net-core-webapi,asp.net-core-3.0,Asp.net Core,Asp.net Core Webapi,Asp.net Core 3.0,我正在使用.NETCore3.0创建Web API。我想将一个通用模型序列化为XML。但默认情况下,它仅将通用模型序列化为JSON 当我试图将一个简单模型序列化为XML时,它被正确地序列化为XML 根据传递的头,我想序列化模型。以下是我迄今为止所做的: 在startup.cs文件中: services.AddControllers(options =>{ options.RespectBrowserAcceptHeader = true; // false by defau

我正在使用.NETCore3.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;
    }
}
如何获得通用模型的
XML
响应?

有两个原因:

  • 您的
    apiressemodel
    没有无参数构造函数
  • 您正在使用
    AddXmlSerializerFormatters()
    (而不是XML DataContractSerializer)的
    XmlSerializer
    ,默认情况下,它不会处理
    IEnumerable
    序列化
  • 要解决此问题,请添加无参数构造函数:

    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; } }
    你的解决方案很有魅力。谢谢。但是,如何为模型包含无参数构造函数来解决这个问题呢?你能简要介绍一下这一点吗?或者你是如何指出确切的问题的。?提前谢谢。@Sunny12我不是像Jon Skeet那样聪明的人,他可以在大脑中编译和运行代码。所以我只是签出日志,日志告诉我应该有一个无参数构造函数:)好的,那么忽略这些日志是不好的。无论如何,谢谢@负离子
    [HttpGet]
    public async Task<IActionResult> Get()
    {
        IEnumerable<RoleDTO> roleList = null;
        roleList = await _repository.RoleRepository.GetAllRolesAsync();
        return Ok(roleList);
    } 
    
    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; } } services.AddControllersWithViews(opts =>{ opts.RespectBrowserAcceptHeader = true; }) .AddXmlDataContractSerializerFormatters() .AddXmlSerializerFormatters()