2016-12-28 5 views
-2

У меня есть класс SalesmanBSON игнорировать поле

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 ", когда я использую c девушка «Коммивояделец». Это означает, что я не должен вставлять или читать из базы данных mongo это поле только в Salesman. Когда я использую Консультанта, я должен «могу» некоторые операции с полем «homeAddress».

+0

Вы могли бы попытаться создать еще один класс, который унаследует 'FutureWorkerInfo' (например,' ExtendedFutureWorkerInfo'), переместите 'HomeAddress' поле для этого нового класса и удалить из 'FutureWorkerHomeAddress'. Затем в «Salesman» вы должны использовать существующий класс, а в «Консультант» - новый. Имеет ли это смысл? –

+0

Thx, но нет, мне нужно остаться с общим лицом –

+2

Пожалуйста, не отрицайте ваши сообщения. – Glorfindel

ответ

0

Вы можете сделать это с помощью интерфейсов.

Создать ISalesmanFutureWorkInfo

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

Создание IConsultantFutureWorkInfo, который имеет HomeAddress и наследуется ISalesmanFutureWorkInfo

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; } 
} 
+0

Хммм. выглядит хорошо:) –

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

Сейчас все в порядке

Смежные вопросы