在开发ASP.NET MVC应用程序时,我发现了一些我的JsonResult操作引发异常的地方"序列化对象时检测到循环引用".
现在,我正在删除有问题的引用,但理想情况下我只想标记属性,使JSON序列化程序忽略它.
谁能建议我怎么做?
Mar*_*arc 28
[ScriptIgnore] 应该适合你.
Sim*_*ver 13
我一般发现,对于复杂的对象,最好通过创建一个临时的"inbetween"对象进行序列化:
例如,对于推荐,我会做以下事情.我实际上在我的ASPX模型页面的代码隐藏中这样做.
这会创建一个漂亮的JSON对象.您会注意到我甚至可以重构我的模型,页面仍然有效.它只是数据模型和页面之间的另一层抽象.我不认为我的控制器应该尽可能多地了解JSON,但ASPX'代码隐藏'当然可以.
/// <summary>
/// Get JSON for testimonials
/// </summary>
public string TestimonialsJSON
{
get
{
return Model.Testimonials.Select(
x => new
{
testimonial = x.TestimonialText,
name = x.name
}
).ToJSON();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的ASPX中,我只是在一个块中执行此操作:
var testimonials = <%= TestimonialsJSON %>;
// oh and ToJSON() is an extension method
public static class ObjectExtensions
{
public static string ToJSON(this Object obj)
{
return new JavaScriptSerializer().Serialize(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经准备好反对这个建议了......把它带上......
我没有访问数据,只是重新格式化View的模型.这是'视图模型'逻辑,而不是'控制器模型'逻辑.
| 归档时间: |
|
| 查看次数: |
9469 次 |
| 最近记录: |