首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON.net JsonIgnoreAttribute不使用"EntityKey“属性

JSON.net JsonIgnoreAttribute不使用"EntityKey“属性
EN

Stack Overflow用户
提问于 2011-12-21 22:29:27
回答 2查看 3.8K关注 0票数 7

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

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

下面是一个示例:

将应用于EF类的类:

代码语言:javascript
复制
 public class Role_DoNotSerialize
    {
        [JsonIgnore]
        public string Users { get; set; }
    }

EF类的分部类文件:

代码语言:javascript
复制
[MetadataType(typeof(Role_DoNotSerialize))]
    public partial class Role
    { 
    }

在上面的例子中,当序列化一个"Role“对象时,属性"Users”不会被序列化。

我的问题是,当我像这样添加EntityKey属性时,同样的技术无法工作:

代码语言:javascript
复制
public class Role_DoNotSerialize
    {
        [JsonIgnore]
        public string Users { get; set; }

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

使用这个类,"EntityKey“属性仍然是序列化的。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 00:33:55

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

代码语言:javascript
复制
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

代码语言:javascript
复制
JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new ExcludeEntityKeyContractResolver();

请注意,您不仅限于一个lambda函数,而且您可以实现任何类型的检查。您甚至可以重写Converter per属性来执行自定义序列化。

票数 4
EN

Stack Overflow用户

发布于 2014-05-09 22:25:45

我认为JSON.NET的最新版本现在支持这一点。此示例适用于我们在MVC站点中的工作,但您可以随心所欲地使用字符串。

代码语言:javascript
复制
public ActionResult ContentJsonFormatted(object obj, Formatting formatting = Formatting.Indented)
{
    string result = JsonConvert.SerializeObject(obj, formatting);
    return Content(result, "text/plain");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8591424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档