【发布时间】:2016-09-13 20:14:00
【问题描述】:
我知道有很多与这个主题相关的问题,但没有一个能解决我的问题。
我将 MVC 5 与 Entity Framework 6 和 Newtonsoft.Json 一起使用。
我有这个例外的常见情况:
Service => Staff => Service
当我尝试在我的视图中序列化 service 对象时,如下所示:
var arr = @Html.Raw(@JsonConvert.SerializeObject(Model.Services));
我收到“circular reference was detected while serializing an object of type...”异常。
我在这里找到的所有答案都说很难解决,我应该添加
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.PreserveReferencesHandling = PreserveReferencesHandling.All;
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
在我的Global.asax 文件中。
嗯,我做到了,但它不起作用。我在 MSDN 上阅读了一堆文章,他们都说同样的话。我不知道为什么,但它对我不起作用。
我可以让它工作的唯一方法是在我的控制器中创建整个序列化上下文:
var settings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.All,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
var serializer = JsonSerializer.Create(settings);
var msmStream = new MemoryStream();
var txtWriter = new StreamWriter(msmStream);
var writer = new JsonTextWriter(txtWriter) { Formatting = Formatting.Indented };
serializer.Serialize(writer, services);
var json = Encoding.ASCII.GetString(msmStream.GetBuffer());
但是,这是一个非常糟糕的解决方案,特别是当我在视图中动态地从视图模型中序列化属性时。它还违背了“全局配置”的全部目的。
有人遇到过这个问题吗?
【问题讨论】:
-
你能展示你的 JSON 吗?
标签: c# asp.net-mvc entity-framework serialization json.net