C# – Always have error “The ObjectContent 1 type failed to serialize the response body…”

asp.net-web-apicentity-frameworkjson.netserialization

I use Web api to retrieve data from the database. I only have 1 table "tblMessage" and want to get data from that table.

I set everything up but then when I run the website. the error always say

The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml

I read some posts on stackoverflow that sayid the error could be fixed by telling the browser to output data in json format. After that, the error becomes

The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json

I have tried all solutions from the following posts, but they dont fix the problem ( browser reports the same error)

Web API Error: The 'ObjectContent`1' type failed to serialize the response body for content type

Failed to serialize the response body for content type

Web API Error: The 'ObjectContent`1' type failed to serialize the response body for content type

What exactly this error is?

public interface IMessage
{
    IQueryable<Message> GetAll();
}

public class Message
{
    [Key]
    public int i_StmID { get; set; }
    public string vch_MsgString { get; set; } 
}

public class EFDBContext : DbContext
{
    public DbSet<Message> Message { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Message>().ToTable("tblMessage");
    }
}

public class MessageRepository : IMessage
{
    private EFDBContext context = new EFDBContext();

    public IQueryable<Message> GetAll()
    {
        return context.tblMessage;
    }
}

public class MessageController : ApiController
{
    public IMessage repo = new MessageRepository();

    public IEnumerable<Message> GetAllMsg()
    {
        return repo.GetAll();
    }
}

Best Answer

Change IEnumerable<Message> to List<Message>

public IEnumerable<Message> GetAllMsg()
{
    return repo.GetAll();
}

to

public List<Message> GetAllMsg()
{
    return repo.GetAll();
}

UPDATE: But beware of getting OutOfMemoryException because this method will store all Message objects in local memory so you have to implement some kind of paging.

Related Topic