Web API 使用 NHibernate 响应的自定义序列化
Web API Custom serialization with NHibernate response
我使用 Web API 和 NHibernate 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
};
}
我使用 Web API 和 NHibernate 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
};
}