【问题标题】:ASP.NET [ScriptIgnore] doesn't work on related objectsASP.NET [ScriptIgnore] 不适用于相关对象
【发布时间】:2012-08-19 14:20:35
【问题描述】:

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

即Json(用户)

I.E

class user {
 Badges badges
}

class Badge {

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

有没有办法解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    有没有办法解决这个问题?

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

    如果您不想遵循我推荐的视图模型方法,那么[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 序列化将由于循环引用错误而失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多