従来のAPIコントローラーとWebAPIコントローラーの両方を使用してMVC4アプリケーションを構築しています。コードファーストでEF5も使用しているので、循環参照につながるナビゲーションプロパティがあります。JsonIgnore
Jsonにシリアル化するときに循環参照ループに遭遇しないように、これらのナビゲーションプロパティの属性を使用しています。
このアプローチは、私のWeb APIコントローラーでは問題なく機能しますがHtml.Raw(Json.Encode(Model))
、従来のコントローラーのRazorテンプレートで使用すると、循環参照のために例外が発生します。
オブジェクトのシリアル化中に循環参照が検出されました
この例外はで発生しSystem.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal
ます。Json.Encode
別のJsonエンコーダー(json.netではない)を使用しているように見えるので、これを正しく解釈していますか?Razorテンプレート内からWebAPIで使用される構成済みのJson.Netフォーマッターを使用するにはどうすればよいですか?
次のクラスを使用する回避策を思いつきました
namespace MyMVCProject.Globals
{
public class Helper
{
public static string ToJson(object obj)
{
return JsonConvert.SerializeObject(obj, GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings);
}
}
}
テンプレート内で使用できます。@Html.Raw(MyMVCProject.Globals.Helper.ToJson(Model))
これは、私がデフォルトの動作であると期待するものに対してはまだ厄介だと感じていますJson.Encode