gpt4 book ai didi

JSON.net JsonIgnoreAttribute 不适用于 "EntityKey"属性

转载 作者:行者123 更新时间:2023-12-04 12:12:10 25 4
gpt4 key购买 nike

我正在使用 JSON.net 来序列化我的 EntityFramework 对象。

过去,我创建了一个将“JsonIgnore”属性应用于属性的类,然后将主 EntityFramework 类的“MetadataType”属性设置为该新创建的类。

下面是一个例子:

将应用于 EF 类的类:

 public class Role_DoNotSerialize
{
[JsonIgnore]
public string Users { get; set; }
}

EF 类的部分类文件:
[MetadataType(typeof(Role_DoNotSerialize))]
public partial class Role
{
}

在上面的示例中,在序列化“角色”对象时不会序列化属性“用户”。

我的问题是,当我像这样添加 EntityKey 属性时,同样的技术无法工作:
public class Role_DoNotSerialize
{
[JsonIgnore]
public string Users { get; set; }

[JsonIgnore]
public System.Data.EntityKey EntityKey { get; set; }
}

使用这个类,“EntityKey”属性仍然被序列化。我究竟做错了什么?

最佳答案

你可以通过实现你自己的 ContractResolver 来做到这一点(使用 JSON.NET 4.5 的示例代码,但也可以使用旧版本)

public class ExcludeEntityKeyContractResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
IList<JsonProperty> properties = base.CreateProperties(type,memberSerialization);
return properties.Where(p => p.PropertyType != typeof (System.Data.EntityKey)).ToList();
}
}

然后你可以设置它来为你的 JsonSerializerSettings 对象设置 ContractResolver
JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new ExcludeEntityKeyContractResolver();

请注意,您不仅限于该一个 lambda 函数,还可以实现您想要的任何类型的检查。您甚至可以覆盖每个属性的 Converter 以进行自定义序列化。

关于JSON.net JsonIgnoreAttribute 不适用于 "EntityKey"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com