在Servicestack响应中忽略带注释的忽略字段

时间:2015-02-16 12:21:11

标签: c# servicestack ormlite-servicestack

我有这样的请求:

 ARequest : QueryBase<Person, Result>, IJoin<Person, OtherThing>

人有以下字段

[Ignore]
Public string Label { get { return FirstName + LastName; }

在我的结果中,我有以下

public int Id; 
public string Label

但是,如果我向字段添加Ignore属性,则会被忽略。因此,每当我执行所有操作时,返回的唯一内容就是ID列表,而在QueryResponse中,Label始终为空,如果我返回Person而不是Result我得到一个完全充满的回应。

所以问题是,我如何确保OrmLite不在数据库中搜索标签,而是在我的自定义返回对象中设置标签。

2 个答案:

答案 0 :(得分:1)

mythz向我解释了这样一个事实:如果它没有映射到你的ormlite数据库,它不会在以后映射到你生成的DTO,我会快速解决这个问题。而不是立即在以下行返回我自己的响应:

ARequest : QueryBase<Person, Result>, IJoin<Person, OtherThing>

我刚刚返回了person对象:

 ARequest : QueryBase<Person>, IJoin<Person, OtherThing>

然后在我的服务中,我按照以下几行编写了一个简单的映射器:

   QueryResponse<Result> response = result.ConvertTo<QueryResponse<Result>>();
    response.Results = new List<Result>();

    foreach (Person p in result.Results)
     {

       response.Results.Add(new Result{ Id = p.EmployeeId, Label = (p.FirstName + " " + p.LastName) });
     }
   return response

这样我确保标签上填充了firstname和lastname,但是没有重新设计我的结果DTO,所以我可以保持它非常通用。

答案 1 :(得分:0)

不确定我是否理解您要做的事情,但如果您只想返回Label,您应该能够将其添加到返回的DTO中,例如:

public class Result
{
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public string Label { get { return FirstName + LastName } }
}