首页 > 解决方案 > 自定义 ASP.NET ControllerBase 的序列化行为

问题描述

我正在构建一个 REST 服务,它提供来自我的数据库或模拟位置的数据。

[Route("[controller]")]
public class ProjectController : ControllerBase

我有一个接口,它定义了我在客户端中实际需要的属性。

public interface IProject : IProduction
{
    string Title { get; set; }
}

以及接口的两个实现,一个精简的模拟对象:

public class MockProject : ProductionBase, IProject
{
    public string Title { get; set; }
}

还有一个奇特的,它包含我们不都希望将数据泄露给公共接口的数据。

public class DBProject : ProductionDBBase, IDBReadable, IProject
{
    public string ExternalProjectTitle { get; set; }

    public DateTime ModifyDate { get; set; }

    public string RootDirectory { get; set; }

    public string Title { get; set; }
}

所以在我的控制器中,我有一个 GET 函数,

    [HttpGet]
    public ActionResult<IEnumerable<IProject>> GetProjects()
    {
        Enumerable<IProject> projects = ...
        return projects;
    }

但它正在序列化 DBProject 的所有属性,而不仅仅是 IProject 的属性。我可以在不在 MockProject 中创建复制构造函数并在序列化之前转换所有对象的情况下更改此行为吗?或者装饰我不想用属性序列化的每个属性?

标签: c#asp.netrestjson-serialization

解决方案


推荐阅读