异步返回对象时出现堆栈溢出异常

时间:2015-04-20 13:21:43

标签: mongodb asynchronous asp.net-web-api

在使用带有WebApi的MongoDB C#驱动程序时,我遇到了以下问题。当我想从数据库中读取所有文档(甚至只是一个)时,repo的函数将获得正确的数据,但在WebApi中,从repo返回的对象会导致堆栈溢出。我怀疑我对返回对象的方式做错了。

WebApi调用Repo的方法:

// GET api/<controller>
public async Task<List<Event>> Get()
{
    return await _repo.FindAll();
}

// GET api/<controller>/5
public async Task<Event> Get(string id)
{
    Event e = await _repo.FindById(id);
    return e;
}

Repo中的相应方法:

public async Task<Event> FindById(string id)
{
    Event e = await _collection.Find<Event>(x => x.ID == ObjectId.Parse(id)).FirstAsync();
    return e;
}

public async Task<List<Event>> FindAll()
{
    var filter = new BsonDocument();
    List<Event> list = await _collection.Find(filter).ToListAsync();
    return await Task<List<Event>>.FromResult(list);
}

提前感谢您的所有帮助!


编辑:我发现当我从函数而不是Event返回字符串时,整个过程都有效。

我认为造成问题的是事件中的ID属性。

1 个答案:

答案 0 :(得分:0)

问题是该事件有一个ObjecId属性。 JSON.Net不知道该类型。请在此处查看解决方案:JSON.NET cast error when serializing Mongo ObjectId