ScriptIgnore属性被忽略

时间:2016-09-06 21:27:23

标签: asp.net-mvc entity-framework javascriptserializer ef-fluent-api

我正在尝试序列化一个DTO,但它倒下了,声称一个循环引用问题 - 这绝对有效。我有以下实体:

public class User {
    [Key]
    public int UserID { get;set; }
    public string EmailAddress { get;set; }
    // etc
    [ScriptIgnore]
    public virtual ICollection<Role> Roles { get;set; }
};

public class Role {
    [Key]
    public int RoleID { get;set; }
    // etc
    [ScriptIgnore]
    public virtual ICollection<User> Users { get;set; }
};

这两个实体都映射到他们在数据库中的名称,以及一个中间表UserRoles,它不是通过但是被映射为自定义EntityTypeConfiguration

当我来序列化User对象时,会出现错误:

A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.User_7A469191462B9ADC27B374089E18004C2D72F0D107975B83F04E7A46145E1B1E'.

显然,通过查看UserRole类,它们都包含彼此的集合,这就是生成circular reference错误的原因,但我会假设通过添加针对ScriptIgnoreUsers成员的Roles属性,在此示例中将忽略它们。

1 个答案:

答案 0 :(得分:1)

好吧,也许我的发帖太快了。

这就是答案:

ScriptIgnore, JsonSerializer not paying any attention?

使用[ScriptIgnore(ApplyToOverrides = true)]参数修复了它!