以前に、とある商店街のホームページを作った際に、Web API でリレーションを張ったテーブルを扱う際に、ちょっとひかかったポイントについて、その回避策のひとつを備忘録として整理しておきます。
次のような Entity Framework 6 を使って実装したリレーションを張ったテーブルがあります。
このエンティティに基づく POCO(plain-old CLR object)は、次のようになります。
これを、このまま使って、通常通りに Web API を生成(スキャッフォールディング)して、実行(Fiddlerを使いました)すると、次のようなエラーになってしまいます。
「'ObjectContent`1'型は コンテンツ タイプ 'application/json; charset=utf-8' の応答本文のシリアル化に失敗しました。」
これを回避する一つの方法が、次の方法になります。
【プロキシを無効にして、Include参照を追加する方法】
まずは、xxxModel.Context.cs を開いて、そのコンストラクタにプロキシを無効にするコードを追加します。
続いて、Web API でスキッフォールディング生成した該当エンティティのコードに、次のように Includeを追加します。
最後に、WebApiConfig.cs を開いて、 json.net シリアライザーにおいて循環参照を無視するコードを追加します。
これらの設定後に、Fiddlerで実行すると、今度は問題なく結果のデータを受け取ることができました。