Car*_*los 8 vb.net json asp.net-web-api
我正是在这个问题的相同情况下: 我如何使JSON.NET忽略对象关系?
我看到提议的解决方案,我知道我必须使用合同左轮手枪,我也看到合同解析器的代码,但我不知道如何使用它.
RAM*_*RAM 24
我希望这有帮助:
如果已手动创建模型(不带Entity Framework/ EF),请virtual首先将关系属性标记为.
如果您的模型是由您创建的EF,那么Relation Property已经为您创建了:每个virtual都标记为JSON,如下所示:
现在,ContractResolver序列化程序可以使用此自定义代码忽略这些关系属性:
class CustomResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty prop = base.CreateProperty(member, memberSerialization);
var propInfo = member as PropertyInfo;
if (propInfo != null)
{
if ( propInfo.GetMethod.IsVirtual && !propInfo.GetMethod.IsFinal)
{
prop.ShouldSerialize = obj => false;
}
}
return prop;
}
}
Run Code Online (Sandbox Code Playgroud)
要使JSON.NET使用上述内容JSON.NET,请将其设置如下:
// Serializer settings
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ContractResolver = new CustomResolver();
settings.PreserveReferencesHandling = PreserveReferencesHandling.None;
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
settings.Formatting = Formatting.Indented;
// -------------------------------------------------------------------
// Do the serialization and output to the console
string json = JsonConvert.SerializeObject(pc, settings);
Run Code Online (Sandbox Code Playgroud)
结果将忽略所有导航(关系)属性[虚拟属性].
感谢来自@BrianRogers他的回答在这里.
如果您正在使用Newtonsoft.Json
将字段标记为
Newtonsoft.Json.JsonIgnore
Run Code Online (Sandbox Code Playgroud)
代替
System.Text.Json.Serialization.JsonIgnore
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4078 次 |
| 最近记录: |