0

While using MongoDB C# driver with WebApi I came to the following problem. When I want to read all documents (or even just one) from the database the repo's function will get the correct data but in WebApi the object returned from the repo causes a stack overflow. I suspect that I am doing something wrong with the way the objects are returned.

WebApi where the Repo's method is called:

// 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;
}

And corresponding methods in the 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);
}

Thanks for all the help in advance!


Edit: I found that when I return string from the function instead of Event the whole thing works.

What I think is making problems is the ID property in the Event.

andreicek
  • 53
  • 2
  • 10

1 Answers1

0

The problem was that the Event had an ObjecId property. The JSON.Net doesn't know about that type. See the solution here: JSON.NET cast error when serializing Mongo ObjectId

Community
  • 1
  • 1
andreicek
  • 53
  • 2
  • 10