通过T4模板解决EF模型序列号的循环引用问题

时间:2023-03-10 02:32:28
通过T4模板解决EF模型序列号的循环引用问题

在模型的T4模板(如model.tt)中插入如下代码,这样由模板生成的模型代码中的导航属性将自动带有[JsonIgnore]标识,不会被序列化

1. 添加命名空间的引用

找到以下代码,添加using Newtonsoft.Json;

BeginNamespace(code);
#>
using Newtonsoft.Json;
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
  

2.为导航属性添加JsonIgnore标签

找到以下代码,插入[JsonIgnore]标签

<#
foreach (var navigationProperty in navigationProperties)
{
if (navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
{
#>
[JsonIgnore]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
<#
}
#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
}
}
#>

BTW:另外一个比较好的解决方是Gryzor大侠的:

解决.Net MVC EntityFramework Json 序列化循环引用问题.