首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在JSON MVC中防止ASP.NET序列化?

如何在JSON MVC中防止ASP.NET序列化?
EN

Stack Overflow用户
提问于 2009-08-12 22:37:17
回答 4查看 9.9K关注 0票数 17

在开发ASP.NET MVC应用程序时,我发现一些地方的JsonResult操作会抛出异常“序列化对象时检测到循环引用”。

现在,我正在删除有问题的引用,但理想情况下,我希望简单地标记该属性,以便JSON序列化程序忽略它。

有没有人能建议我怎么做?

EN

回答 4

Stack Overflow用户

发布于 2009-08-12 22:46:15

我通常发现,对于复杂的对象,最好是通过创建一个临时的“中间”对象来进行序列化:

例如,对于推荐信,我做了以下操作。我实际上是在我的ASPX模型页面的代码后台中这样做的。

这将创建一个很好的JSON对象。你会注意到,我甚至可以重构我的模型,页面仍然可以工作。它只是数据模型和页面之间的另一个抽象层。我不认为我的控制器应该尽可能多地了解JSON,但ASPX的“代码背后”肯定可以。

代码语言:javascript
复制
/// <summary>
/// Get JSON for testimonials
/// </summary>
public string TestimonialsJSON
{
    get
    {
        return Model.Testimonials.Select(
            x => new
            {
                testimonial = x.TestimonialText,
                name = x.name
            }
            ).ToJSON();
    }
}

在我的ASPX中,我只是在一个块中这样做:

代码语言:javascript
复制
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);
    }
}

我已经准备好面对这一建议的强烈反对。来吧..。

我不是在访问数据,只是为View重新格式化一个模型。这是“视图模型”逻辑,而不是“控制器模型”逻辑。

票数 13
EN

Stack Overflow用户

发布于 2009-08-12 23:00:05

我建议使用JSON.NET。它允许序列化循环引用,并提供更多的序列化选项。

票数 2
EN

Stack Overflow用户

发布于 2009-08-13 01:11:32

西蒙说的话。添加一个小的AutoMapper操作来控制代码重量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1269106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档