WebApi 2和EntityFramework,' ObjectContent`1'类型无法序列化响应正文

时间:2014-03-31 09:33:35

标签: c# entity-framework asp.net-web-api

我正在使用带有EntityFramework 5.0的MVC5 + WebAPI2开发我的第一个Web应用程序。

在我的应用程序中,我必须显示从数据库中提取的事务列表,因此我有一个WebApi Controller,它执行以下操作:

    [RoutePrefix("api/transaction")]
public class TransactionApiController : ApiController
{
    [Route("{userid}/{status}")]
    [HttpGet]
    [Authorize]
    public TPASS_Transaction[] getTransactions(string userid, int status) {
        using (var ec = new TelepassEntities()) {
            TPASS_Transaction[] transactions = ec.TPASS_Transaction
            .Where(t => t.TransactionOwner.EndsWith(userid) && t.Status == status)
            .ToArray();
            return transactions;
        }
    }
}

然而,在客户端我收到一个错误:' ObjectContent`1'类型无法序列化响应正文。看起来这是由于TPASS_Transaction类中的属性HBTI_Employee:

"InnerException":{"Message":"An error has occurred.",
"ExceptionMessage":"Error getting 
value from 'HBTI_Employee1' on 
'System.Data.Entity.DynamicProxies.HBTI_Employee_...

我解决这个问题的方法是创建一个TransactionViewModel类,并在服务器上从原始的TPASS_Transaction创建这种类型的对象,避免使用HBTI_Employee属性:

    [Route("{userid}/{status}")]
    [HttpGet]
    [Authorize]
    public TransactionVM[] getTransactions(string userid, int status) {
        using (var ec = new TelepassEntities()) {
            TransactionVM[] transactions = ec.TPASS_Transaction
            .Where(t => t.TransactionOwner.EndsWith(userid) && t.Status == status)
                .Select(t => new TransactionVM()
                            { 
                                //all properties of TPASS_Transaction
                                //but HBTI_Employee
                            }).ToArray();
            return transactions;
        }
    }

无论如何,在我的应用程序中为每个模型类执行它会很繁琐,所以我宁愿使用原始对象。我搜索了这个问题,但似乎没有人给出这个问题的好答案/解决方案。任何人都可以解释我错在哪里/我在这里缺少什么?

0 个答案:

没有答案