我正在使用传统和 Web API 控制器构建 MVC 4 应用程序。由于我还使用 EF5 和代码优先,因此我具有导致循环引用的导航属性。我JsonIgnore
在这些导航属性上使用属性以避免在序列化为 Json 时遇到循环引用循环。
这种方法完美地适用于我的 Web API 控制器,但是,当Html.Raw(Json.Encode(Model))
在传统控制器的 Razor 模板中使用时,由于循环引用,我得到一个异常:
序列化对象时检测到循环引用
此异常发生在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal
. 我是否正确地解释了这一点,因为它Json.Encode
似乎使用了不同的 Json 编码器(不是 json.net)?如何从 Razor 模板中使用 Web API 中使用的已配置 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