7

我有一组 linq to sql 类,并使用 .NET JavaScriptSerializer 将它们序列化为 JSON。

但是,只要我将记录添加到相关表中,序列化就会引发“循环引用异常”。啊啊啊!

这里有详细描述。

我有几个选择

  • 将 linq to sql 类转换为没有关系的类,从而避免循环引用
  • 通过使关联归零来剪断循环引用 - 我不认为这是一个真正的选择
  • 使用 ScriptIgnoreAttribute(不知何故)。我不能轻易应用它,因为属性在生成的类中,并且 LINQ to SQL 不会自动尊重伙伴类
  • 使用 JSON.NET 并以某种方式使用属性 + 伙伴类来阻止序列化程序尝试遍历关系。

有人遇到过这种情况么?如果可能的话,我真的更喜欢最后一个选项,但我不知道该怎么做。

任何帮助是极大的赞赏

4

3 回答 3

8

最新版本的 Json.NET 支持序列化循环关系。查看帮助中的保留对象引用

于 2009-09-25T10:28:01.573 回答
4

接受答案的附加链接

Json.NET 帮助,保留对象引用(带有示例)

似乎它适用于 LINQ to SQL

于 2009-10-23T20:59:40.183 回答
1

詹姆斯的解决方案解决了我的部分问题。我需要在对象中排除某些列表类型。为了解决我的问题,我只是复制了我需要的对象部分。下面是一个例子。

var DB = new DBDataContext();
            var lUsers = new List<User>();
            DB.Users.ToList().ForEach(x => lUsers.Add(new User()
                {
                    ID = x.ID,
                    FIRST_NAME = x.FIRST_NAME
                }) );
于 2013-08-07T23:23:28.280 回答