【问题标题】: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 序列化将由于循环引用错误而失败。