@BloodyBlade

Как сериализовать и десериализовать свойства сущности как словарь объектов?

Здравствуйте! Краткое описание ситуации: есть сущности, которые хранятся в базе данных и располагаются в слое доступа к данным. Для каждой сущности в слое бизнес логики есть свой класс DTO, который используются для передачи данных на клиент, содержит необходимые дополнительные свойства и ничего не знает про сущность. Сущность также ничего не знает про DTO.
Для того, чтобы преобразовать сущность в DTO и обратно в каждом классе я сделал два метода - GetProperties и Initialize, первый возвращает все свойства в виде словаря IDictionary, а второй метод получает на вход словарь и из него заполняет свойства. В итоге при добавлении нового свойства приходится обновлять и эти методы, что время от времени забывается, да и утомляет. Вот как, примерно, это выглядит:

public override IDictionary<string, object> GetProperties()
    {
      var baseProperties = base.GetProperties();
      var properties = new Dictionary<string, object>()
      { 
        {"Name", this.Name}, 
        {"PhoneNumber", this.PhoneNumber},
        {"Email", this.Email}
      };
      return baseProperties.Union(properties).ToDictionary(d => d.Key, d => d.Value);
    }

    public override void Initialize(IDictionary<string, object> properties)
    {
      base.Initialize(properties);
      this.Name = (string)properties["Name"];
      this.PhoneNumber = (string)properties["PhoneNumber"];
      this.Email = (string)properties["Email"];
    }


Собственно, вопрос. Возможно ли сериализовать свойства сущности как словарь объектов, а потом из этого словаря объектов десериализовать обратно в свойства сущности? Иои может можно это делать с помощью сериализации в Json? Или можно сделать какой-то свой аттрибут, которым помечать нужные свойства? Буду рад любой информации, заранее спасибо!
  • Вопрос задан
  • 245 просмотров
Пригласить эксперта
Ответы на вопрос 1
@timda
asp.net веб-разработчик
[Serializable]
[DataContract]
2google
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы