【问题标题】:Bson ignore fieldBson忽略字段
【发布时间】:2017-07-20 18:25:27
【问题描述】:

我有课推销员

public class Salesman
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId Id { get; set; }

    [BsonElement("complementTime")]
    public DateTime ComplementTime { get; set; }

    [BsonElement("futureWorker")]
    public FutureWorkerInfo FutureWorker { get; set; }
}

和班级顾问

public class Consultant
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId Id { get; set; }

    [BsonElement("complementTime")]
    public DateTime ComplementTime { get; set; }

    [BsonElement("futureWorker")]
    public FutureWorkerInfo FutureWorker { get; set; }

    [BsonElement("recommendedWorkers")]
    public FutureWorkerInfo[] RecommendedWorkers { get; set; }       
}

这两个类都有类

 public class FutureWorkerInfo
{
    [BsonElement("name")]
    public string Name { get; set; }

    [BsonElement("homeAddress")]
    public FutureWorkerHomeAddress HomeAddress { get; set; }

    [BsonElement("phone")]
    public string Phone { get; set; }

    [BsonElement("secondPhone")]
    public string SecondPhone { get; set; }

    [BsonElement("email")]
    public string Email { get; set; }

    [BsonElement("birthDate")]
    public string BirthDate { get; set; }
}

当我使用“推销员”类时,我需要忽略字段“homeAddress”。这意味着我不必仅在 Salesman 中插入或从 mongo 数据库中读取此字段。当我使用顾问时,我应该“可以”使用“homeAddress”字段进行一些操作。

【问题讨论】:

  • 您可以尝试创建另一个继承FutureWorkerInfo 的类(例如ExtendedFutureWorkerInfo),将HomeAddress 字段移动到这个新类并从FutureWorkerHomeAddress 中删除。然后在Salesman 中,您将使用现有的类,在Consultant 中使用新的类。这有意义吗?
  • 谢谢,但不,我需要和普通实体呆在一起
  • 请不要破坏您的帖子。

标签: c# json mongodb bson database


【解决方案1】:

您可以使用接口来做到这一点。

创建一个 ISalesmanFutureWorkInfo

public interface ISalesmanFutureWorkInfo
{
    string Name { get; set; }
    string Phone { get; set; }
    string SecondPhone { get; set; }
    string Email { get; set; }
    string BirthDate { get; set; }
}

创建一个具有 HomeAddress 并继承 ISalesmanFutureWorkInfo 的 IConsultantFutureWorkInfo

public interface IConsultantFutureWorkInfo : ISalesmanFutureWorkInfo
{
    FutureWorkerHomeAddress HomeAddress { get; set; }
}

更改您的类以使用接口。

public class Consultant
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId Id { get; set; }

    [BsonElement("complementTime")]
    public DateTime ComplementTime { get; set; }

    [BsonElement("futureWorker")]
    public IConsultantFutureWorkInfo FutureWorker { get; set; }

    [BsonElement("recommendedWorkers")]       
    public IConsultantFutureWorkInfo[] RecommendedWorkers { get; set; }
}

public class Salesman
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId Id { get; set; }

    [BsonElement("complementTime")]
    public DateTime ComplementTime { get; set; }

    [BsonElement("futureWorker")]
    public ISalesmanFutureWorkInfo FutureWorker { get; set; }
}

【讨论】:

  • 嗯。看起来不错:)
【解决方案2】:
[BsonElement("homeAddress")]
[BsonIgnoreIfNull]
public FutureWorkerHomeAddress HomeAddress { get; set; }

现在一切正常

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 2016-07-12
    • 1970-01-01
    • 2015-12-01
    • 2019-12-31
    • 2014-09-27
    • 1970-01-01
    • 2021-06-11
    • 2023-03-11
    相关资源
    最近更新 更多