问题
使用newtonsoft序列化对象的时候报错:检测到属性的自引用循环
JsonConvert.SerializeObject(value)
原因
查看序列化对象,发现里面的导航属性存在相互应用的情况:
class1
public class BizDictionary:BaseEntity
{
#region 表字段
#endregion
#region 显示字段
#endregion
#region 关联表
#endregion
#region 子表
/// <summary>
/// 业务字典列表
/// </summary>
[Display(Name = "业务字典列表")]
public List<BizDictionaryDetail> BizDictionaryDetailList { get; set; }
#endregion
}
class2
public class BizDictionaryDetail:BaseEntity
{
#region 表字段
#endregion
#region 显示字段
#endregion
#region 关联表
/// <summary>
/// 数据源ID
/// </summary>
[Display(Name = "数据源ID")]
public BizDictionary Dic { get; set; }
#endregion
#region 子表
#endregion
}
解决
1.在使用JsonConvert.SerializeObject时,传如序列化配置参数,亲测有效
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings();
jsonSerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
具体使用封装如下:
public static string Serialize(this object obj, JsonSerializerSettings format = null)
{
if (obj == null) return null;
format = format ?? new JsonSerializerSettings
{
DateFormatString = "yyyy-MM-dd HH:mm:ss",
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,//解决循环引用问题
NullValueHandling = NullValueHandling.Ignore
};
return JsonConvert.SerializeObject(obj, formatDate);
}
2.使用[JsonIgnore]特性(写在主体或写在子体都可以) ,这个试过好像无效,不过也列出来让大家参考下
public class BizDictionary:BaseEntity
{
#region 表字段
#endregion
#region 显示字段
#endregion
#region 关联表
#endregion
#region 子表
/// <summary>
/// 业务字典列表
/// </summary>
[Display(Name = "业务字典列表")]
[JsonIgnore]
public List<BizDictionaryDetail> BizDictionaryDetailList { get; set; }
#endregion
}
3.查询的时候加上方法AsNoTracking(),这个试过也无效,不知道是不是使用方法不对,我试的时候加的位置试查询被序列化对象value的查询上
dictionaryList = base.repository.FindAsIQueryable(t => t.IsEnable == 1)
.Include(c => c.BizDictionaryDetailList).AsNoTracking().ToList();
处理Bug的具体步骤
- 重现BUG
- 确定发生BUG的过程时都做了哪些动作
- 桌面检查:把自己的脑子作为CPU,运行从开始操作到出现BUG的操作、处理的数据,分析出现问题的原因
- 调试:确定问题出现的原因
- 确定解决方案
- 修复BUG
- 回归测试:确定已BUG已修复并没引入新问题
没有粉丝,没有评论,甚至连读者都没有。因为自己写的烂,因为自己水平有限,所以自己的作品一经发出就石沉大海了,得不到任何的回信,就好像自己写的东西是给自己看的。自己的作品怎么看都好像不够完美,全身的毛病,所以读者不喜欢也很正常对吧!
其实最让我开心的是有些读者们夸我文笔不错,或许是有人第一次这样夸我的缘故吧!又或许是我写的东西没什么人认可,我感受到了一种前所未有的激动,对于未来的憧憬,对自己写下去的动力。
因为有你们,我的写作之路才不孤独,因为有你们,我才能坚持到现在,如果有一天我真的写出圈了,或许我们可以整个交流会之类的,到时候促膝长谈。
“书山有路勤为径,学海无涯苦作舟。”写作苦是苦了点,整得我差点就想放弃了,不过还好有你们。我也不急着成功,因为没有个几十年如一日的坚持,哪能轻易成功?
茫茫文海无人意,天下有君识吾心。文海很孤独,但是有诸君,便足以令我至千里。