Web API 使用 NHibernate 响应的自定义序列化

Web API Custom serialization with NHibernate response

我使用 Web APINHibernate ORM 创建应用程序。调用 get 方法时遇到问题。 NHibernate Fluent mapping 中有很多关系。例如:

public class Case : GuidEntityBase
{
    public virtual CaseType CaseType { get; set; }
    public virtual string CaseNumber { get; set; }
    public virtual DateTime CaseDate { get; set; }
    public virtual IList<Document> Documents { get; set; }

    public Case()
    {
        Documents = new List<Document>();
    }
}

public class Document : GuidEntityBase
{
    public virtual DocumentType DocumentType { get; set; }
    public virtual string DocumentNumber { get; set; }
    public virtual DateTime DocumentDate { get; set; }

    public virtual Case Case { get; set; }
}

所以当我调用以下 HttpGet 时,

    [Route("api/document/GetItem/{id}")]
    [HttpGet]
    public Document GetItem(string Id)
    {
        var response = service.GetItem(Id);

        //response.Value.Case = null;

        return response.Value;
    }

我得到文档数据,但同时我也得到案例数据。我怎样才能过滤这个过程?我写了response.Value.Case = null;,但这不是解决问题的好方法。

发送实体是个坏主意,你应该做的是根据你的视图创建一个模型,填充它并发送它。

    public class DocumentDto
    {
        public Guid Id { get; set; }
        public DocumentType DocumentType { get; set; }
        public string DocumentNumber { get; set; }
        public DateTime DocumentDate { get; set; }
    }

    [Route("api/document/GetItem/{id}")]
    [HttpGet]
    public DocumentDto GetItem(string Id)
    {
        var doc = service.GetItem(Id).Value;
        return new DocumentDto(){
            Id = doc.Id,
            //set other properties from doc
        };
    }