2

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

即Json(用户)

IE

class user {
 Badges badges
}

class Badge {

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

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

4

1 回答 1

2

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

我建议您使用仅公开您需要的属性并将视图模型传递给 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));
    }
}

如果从类的属性中删除该属性[ScriptIgnore],则JSON 序列化将由于循环引用错误而失败。UserBadge

于 2012-08-19T06:14:34.023 回答