You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON反序列化报错:找不到FileContentResult的合适构造函数

问题原因与解决方案

错误核心原因

报错的问题不在CreatePreviousInvoiceResponse类,而是**Microsoft.AspNetCore.Mvc.FileContentResult作为ASP.NET内置类,不适合直接用于JSON序列化/反序列化**:

  • FileContentResult没有无参构造函数,也未标记JsonConstructor特性,Json.NET无法自动实例化该类
  • 从返回的JSON可见,原本应为字节数组的fileContents被序列化成了空字符串,这是框架类序列化时的异常表现

解决方案

放弃直接使用框架内置的FileContentResult,自定义专门用于传输文件信息的DTO(数据传输对象),替代原有类型。

1. 自定义文件传输DTO

public class FileDto
{
    public byte[]? FileContents { get; set; }
    public string? ContentType { get; set; }
    public string? FileDownloadName { get; set; }
}

2. 更新响应类定义

将CreatePreviousInvoiceResponse中的FileContentResult替换为自定义的FileDto:

public class CreatePreviousInvoiceResponse
{
    public FileDto? File { get; set; }
    public string? Error { get; set; }

    public CreatePreviousInvoiceResponse() { }
}

3. 调整API控制器返回逻辑

在API端,把文件数据封装到FileDto中返回,不再直接返回FileContentResult:

var fileName = string.Format("invoice_{0}.pdf", body.InvoiceNumber);
var content = result.InvoiceStream.ToArray();

return new CreatePreviousInvoiceResponse
{
    File = new FileDto
    {
        FileContents = content,
        ContentType = "application/pdf",
        FileDownloadName = fileName
    }
};

4. 客户端代码无需修改

客户端的反序列化逻辑保持原样即可,现在JsonConvert.DeserializeObject<CreatePreviousInvoiceResponse>(content)可以正常解析返回的JSON数据。


内容的提问来源于stack exchange,提问作者nerdalert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:46:13