1

当Marten将文档存储在数据库上时,它可能会忽略类属性吗?

例如。:

    public class Test
    {
        public int Id { get; set; }
        public string Name { get; set; }
        [Ignore this when create a document on DB]
        public Date DateOfBirth { get; set; }
    }
4

2 回答 2

3

解决了

public class Test
{
   public int Id { get; set; }
   public string Name { get; set; }
   [IgnoreDataMember]
   public Date DateOfBirth { get; set; }
}
于 2017-07-26T17:03:43.467 回答
0

TL:博士

Marten 只是在后台使用 Newtonsoft.Json,所以要忽略属性,请使用 Newtonsoft JsonIgnoreAttribute

public class Account
{
    public string FullName { get; set; }
    public string EmailAddress { get; set; }

    [JsonIgnore]
    public string PasswordHash { get; set; }
}

解释

这似乎是谷歌搜索顶部可见的问题,所以我想加我的 50 美分。

由于 MartenDB 在内部使用 Newtonsoft.Json,因此该库中的所有属性都应该可以正常工作。我不知道 Igor的答案,无法在图书馆的任何地方确认这一点,所以它目前似乎已经过时了。

来自文档

Marten 持久化策略中一个绝对重要的组成部分是文档对象的 JSON 序列化。Marten 旨在通过每个 JSON 序列化库中的本机机制使 JSON 序列化可扩展和可配置。为了获得一个流畅的“入门”故事,Marten 开箱即用,支持将 Newtonsoft.Json 用作主要 JSON 序列化程序的非常基本的用法。

关于 MartenDB 中的 Newtonsoft.json

MartenDB 不绑定到 Newtonsoft.json,你总是可以为其他库编写自己的适配器。

您所要做的就是实现ISerializer接口:

public interface ISerializer
{
    void ToJson(object document, TextWriter writer);

    string ToJson(object document);

    T FromJson<T>(TextReader reader);

    object FromJson(Type type, TextReader reader);

    string ToCleanJson(object document);

    EnumStorage EnumStorage { get; }

    Casing Casing { get; }

    CollectionStorage CollectionStorage { get; }

    NonPublicMembersStorage NonPublicMembersStorage { get; }
}

更详细的示例:文档

于 2020-10-22T10:44:09.097 回答