ASP.NET Web API无法序列化响应内容

时间:2017-11-06 23:36:02

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

我正在使用实体框架制作一个UWP应用程序,以及关于学生和课程的WebApi。我的学生和课程之间有很多很多关系。我试图在数据库表中路由一个将学生和他们的课程结合起来的动作。我想获取有关学生的信息以及他们注册的课程名称。

这是我的错误消息:

  

' ObjectContent`1'类型无法序列化内容类型' application / xml的响应正文;字符集= UTF-8'

这是我的自定义控制器文件中的自定义路由。

StudentsCoursesController

public class StudentsCoursesController : ApiController
{
    private DataContext db = new DataContext();

    //GET: api/Students/Courses
    [HttpGet]
    [Route("api/Students/Courses")]
    [ResponseType(typeof(Students[]))]
    public IHttpActionResult GetstudentsCourse()
    {
        var Student = from st in db.Students.Include("Courses")
                      select new { st.Id, st.FirstName, st.LastName, st.Courses };

        return Ok(Student);
    }
}

这是DataContext构造函数:

的DataContext:

public DataContext() : base("Database")
    {
        Configuration.ProxyCreationEnabled = false;
        Configuration.LazyLoadingEnabled = false;
        Database.SetInitializer(new LibraryDBInitializer());
    }

以下是我在Web Api中收到的错误消息:

Error message from my Api

我的代码中没有出现任何错误,但我也没有得到任何结果。 什么想法可能是错的?我感觉错误在我的API代码(控制器)中。

  • 感谢

3 个答案:

答案 0 :(得分:0)

您应该将LINQ查询转换为数组 -

  

学生[]

答案 1 :(得分:0)

  

我想获取有关学生的信息,以及他们注册的课程名称。

如果您只想要课程名称,那么只选择课程名称

var Students = db.Students.Include("Courses").Select(st =>
                  new { 
                      Id = st.Id, 
                      FirstName = st.FirstName, 
                      LastName = st.LastName, 
                      Courses = st.Courses.Select(course => course.Name).ToArray() 
                  }).ToArray();

答案 2 :(得分:0)

It is a Serialization problem.

As it is said in this answer you cannot serialize, by default, anonymous types to xml.

In your cliente, change the contente type to "application/json"