尽管将PreserveReferencesHandling设置为"None",Json.Net仍向EF对象添加$ id

Anu*_*aus 8 c# serialization entity-framework json.net

我已经看过如何在JSON序列化期间删除$ id但是给出的答案对我来说似乎没有用,我希望有人能弄清楚我做错了什么.

这是我的代码:

return JsonConvert.SerializeObject(target, new JsonSerializerSettings {
    NullValueHandling = NullValueHandling.Include,
    PreserveReferencesHandling = PreserveReferencesHandling.None,
    ContractResolver = new CustomContractResolver(),
    Converters = CustomConverters
});
Run Code Online (Sandbox Code Playgroud)

这个输出仍然以$ id出现,但仅限于Entity Framework对象,这是设计的吗?如果是这样,有没有办法阻止Entity Framework对象上的那些$ id?

Tyl*_*Y86 18

自定义ContractResolver设置会覆盖该PreserveReferencesHandling设置.

在你的DefaultContractResolver/ 的实现中IContractResolver,添加这个;

public override JsonContract ResolveContract(Type type) {
    var contract = base.ResolveContract(type);
    contract.IsReference = false;
    return contract;
}
Run Code Online (Sandbox Code Playgroud)

此行为与PreserveReferencesHandling.None没有自定义的设置类似ContractResolver.