Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何强制mongo仅序列化指定类型中的属性?(继承)_C#_Mongodb - Fatal编程技术网

C# 如何强制mongo仅序列化指定类型中的属性?(继承)

C# 如何强制mongo仅序列化指定类型中的属性?(继承),c#,mongodb,C#,Mongodb,我有一个ref类,它有几个字段,这些字段是引用对象所必需的,而连接是另一个类上的属性 实际类继承自ref类,因为ref类中的所有字段当然都适用于实际类 我的问题是,如果将整个对象分配给ref class字段,mongo将序列化整个对象 即 及 如果我有另一个引用Contacts的类,该类具有ContactRef类型的属性,并且我分配了一个有效的完整contact,mongodb将序列化contact中的所有属性,而不仅仅是ContactRef中的字段 您会注意到ContactRef继承自实体。当

我有一个ref类,它有几个字段,这些字段是引用对象所必需的,而连接是另一个类上的属性

实际类继承自ref类,因为ref类中的所有字段当然都适用于实际类

我的问题是,如果将整个对象分配给ref class字段,mongo将序列化整个对象

如果我有另一个引用Contacts的类,该类具有ContactRef类型的属性,并且我分配了一个有效的完整contact,mongodb将序列化contact中的所有属性,而不仅仅是ContactRef中的字段

您会注意到ContactRef继承自实体。当它序列化ContactRef时,它也应该从实体获取所有属性,但忽略任何来自Contact的属性

如何做到这一点?我认为这是一个常见的问题。出于明显的原因,我不希望所有这些引用都包含所有字段

如果我用Newtonsoft.Json做这件事,我可以创建一个解析器并注册它,它也可以做类似的事情,但我不确定如何用mongo实现这一点

谢谢

public class ContactRef : Entity
{
    public const string COLLECTION_NAME = "Contacts";

    public string? FirstName { get; set; }
    public string? MiddleName { get; set; }
    public string LastOrCompanyName { get; set; } = string.Empty;

    public ContactTypes ContactType { get; set; }

    public string Name => this.ContactType == ContactTypes.Individual ? $"{this.FirstName} {this.LastOrCompanyName}" : this.LastOrCompanyName;
}
public class Contact : ContactRef
{
    public Contact() : base() { }

    private string? _userName = string.Empty;
    public string? UserName
    {
        get => this._userName; set
        {
            this._userName = value;
            this.NormalizedUserName = value?.ToUpper();
        }
    }
    public string? NormalizedUserName { get; set; }

    public string? PasswordHash { get; set; }
....
}