【问题标题】:Circular reference exception when serializing LINQ to SQL classes序列化 LINQ to SQL 类时出现循环引用异常
【发布时间】:2010-11-30 21:56:26
【问题描述】:

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

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

详细描述here

我有几个选择

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

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

非常感谢任何帮助

【问题讨论】:

    标签: c# .net json serialization json.net


    【解决方案1】:

    最新版本的 Json.NET 支持序列化循环关系。查看帮助中的Preserving Object References

    【讨论】:

    【解决方案2】:

    接受答案的附加链接

    Json.NET Help, Preserving Object References (with example)

    它似乎与 LINQ to SQL 配合得很好

    【讨论】:

      【解决方案3】:

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

      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
                      }) );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多