加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – 如何告诉RavenDB忽略属性而不是WebAPI?

发布时间:2020-12-16 04:38:31 所属栏目:asp.Net 来源:网络整理
导读:我有一个我不想存储在RavenDB中的属性.如果我添加JsonIgnore属性,RavenDB会忽略不计,但WebApi也是如此.我仍然希望WebApi将数据序列化到Web客户端. 我如何告诉RavenDB忽略一个属性但仍然有WebApi序列化它? 解决方法 在RavenDB 2.0中 using Raven.Imports.New
我有一个我不想存储在RavenDB中的属性.如果我添加JsonIgnore属性,RavenDB会忽略不计,但WebApi也是如此.我仍然希望WebApi将数据序列化到Web客户端.

我如何告诉RavenDB忽略一个属性但仍然有WebApi序列化它?

解决方法

在RavenDB 2.0中
using Raven.Imports.Newtonsoft.Json

public class Foo
{
    [JsonIgnore]
    public string Bar { get; set; }
}

因为它使用的是raven的json.net内部化副本–WebApi不会获取该属性.

在RavenDB 1.0或2.0中

您可以使用自定义json合约解析程序直接自定义对象的json序列化.

public class CustomContractResolver : DefaultRavenContractResolver
{
    public CustomContractResolver(bool shareCache) : base(shareCache)
    {
    }

    protected override List<MemberInfo> GetSerializableMembers(Type objectType)
    {
        var members = base.GetSerializableMembers(objectType);

        if (objectType == typeof(Foo))
            members.RemoveAll(x => x.Name == "Baz");

        return members;
    }
}

在初始化时将其连接到文档存储:

documentStore.Conventions.JsonContractResolver = new CustomContractResolver(true);
documentStore.Initialize();

因为它没有连接到任何其他地方,它只会影响RavenDB.根据您的需要定制它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读