ASP.NET [ScriptIgnore] 不适用于相关对象

标签 asp.net asp.net-mvc entity-framework

[ScriptIgnore] 属性在正在序列化的直接对象上对我来说效果很好,但是如果我将它放在相关对象的属性上(从直接对象上的属性引用),它就不起作用申请吗?

即 Json(用户)

IE

class user {
 Badges badges
}

class Badge {

[ScriptIgnore]
SomeObject obj; //Causes circular reference error because scriptignore doesn't apply
}

有办法解决这个问题吗?

最佳答案

Is there a way to get around this?

我建议您使用仅公开所需属性的 View 模型,并将 View 模型传递给 Json 方法。

如果您不想遵循我推荐的 View 模型方法,那么 [ScriptIgnore] 属性也应该适合您。

示例:

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

public class User 
{
    public IEnumerable<Badge> Badges { get; set; }
}

public class Badge 
{
    [ScriptIgnore]
    public User User { get; set; }
}

public class Program
{
    static void Main()
    {
        var user = new User();
        var badge = new Badge { User = user };
        user.Badges = new[] { badge };

        var serializer = new JavaScriptSerializer();
        Console.WriteLine(serializer.Serialize(user));
    }
}

如果从 Badge 类的 User 属性中删除 [ScriptIgnore] 属性,JSON 序列化将因循环引用错误而失败。

关于ASP.NET [ScriptIgnore] 不适用于相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12023048/

相关文章:

c# - Entity Framework `AsNoTracking` 不适用于匿名投影

asp.net - 使用本地 ADFS STS 在 ASP.NET 应用程序和 Office365 之间进行单点登录

javascript - 如何在页面上动态显示: Make ASP.网络标签

c# - 系统参数异常 : Invalid postback or callback argument

asp.net - 应用程序之间的 Azure AD 身份验证

jquery - 获取Asp.Net MVC自动完成文本框的id

c# - 简单的 If/Else Razor 语法

c# - 如何使用 EF 在 ASP.NET MVC 中自动创建数据库和存储库?

c# - linq 中不允许使用 String.Format 或 toString

c# - 如何使用多对多连接表在 C# 查询语法中执行 SelectMany?