我试图根据我的实体类型SYSTEM_AUDIT_SHEET使通用处理程序发布JSONJ对象:

SYSTEM_AUDIT_SHEET sheet = ctx.SYSTEM_AUDIT_SHEET
                              .Where(s => s.SYSTEM_KEY == system_key_dec)
                              .Select(s => s)
                              .OrderByDescending(s => s.AUDIT_SHEET_VERSION)
                              .First();

HttpContext.Current.Response.Write(serializer.Serialize(sheet));


但是我收到以下错误:


  序列化类型为object的对象时检测到循环引用
  'System.Data.Entity.DynamicProxies.SYSTEM_AUDIT_SHEET_521A7B786A51FC0F83641182DD72C8DFE6C082418D30BBB977B403409A74CE17'。


为什么我不能将实体转换为JSON?

最佳答案

您不能将对象转换为引用自己的json,因为这会创建一个无限长的json字符串。

例如,以下伪代码将不起作用,因为它设置了循环引用(Dog >> Bone >> Dog ...):

class Dog {
    private Bone myBone;
    public Dog() {
        myBone = new Bone(this);
    }
}

class Bone {
    private Dog buriedBy;
    public Bone(Dog d) {
        buriedBy = d;
    }
}


谷歌搜索“ json循环引用”似乎有一些好的解决方案。请参阅顶部的两个堆栈溢出链接。

09-17 12:36