2017-11-06 63 views
0

私はEntity Frameworkを使用して、学生とコースについてWebApiを使用してUWPアプリケーションを作成しています。私は学生とコースの間に多面的な関係があります。私は、学生とそのコースを組み合わせたアクションをデータベーステーブルからルーティングしようとしました。私は学生と彼らはに在籍しているコースの名前だけの情報をGETしたいASP.NET Web APIが応答コンテンツのシリアル化に失敗しました

ここに私のエラーメッセージが表示されています。

「ObjectContent`1」タイプの応答をシリアル化することができませんでしたコンテンツタイプ 'application/xmlの本体。 charset = 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()); 
    } 

ここでは、私は私のウェブAPIで取得したエラーメッセージです

Error message from my Api

コードにエラーはありませんが、結果は得られません。 何が間違っている可能性がありますか?私はエラーが私のAPIコード(コントローラ)にあると感じています。

  • おかげ
+1

にcontenteの種類を変更します。 https://stackoverflow.com/questions/12641386/failed-to-serialize-the-response-in-web-apiをご覧ください。 – user1378730

+0

メソッドのレスポンスタイプには学生の配列が必要なので、IQueryableを返すことが問題になる可能性があります。最後にtoArrayを追加すると問題が発生する可能性があります。 –

+0

https://stackoverflow.com/questions/12641386/failed-to-serialize-the-response-in-web-api –

答えて

0

あなたは配列にあなたのLINQクエリをキャストする必要があります -

学生[]私は学生だけの情報をGETしたい

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(); 
0

を選択します。

this answerでは、デフォルトで匿名型をxmlにシリアライズすることはできません。あなたのclienteで

、学生が多くのコースがあり、コースはシリアライザはおそらく無限ループになっている多くの学生を持っている場合は、「アプリケーション/ jsonの」

関連する問題