Как внедрить конвертер Json с помощью Dependency Injection? - PullRequest
0 голосов
/ 18 февраля 2020

Кто-нибудь знает хороший метод или шаблон, где я могу дать иерархии простых классов старой модели возможность конвертировать их из и в Json строк, в то время как

  • Использование внедрения зависимостей для JsonConverter зависимость
  • Относительно реализации c для JsonConverter
  • Возможность быстро предоставить классу JSON возможность без большого количества кода
  • Использование ToString () как удобный метод для отображения содержимого объектов в виде Json string
  • Соблюдение правил чистого кодирования?

Я начал с идеи ниже, однако обнаружил, что следующее возникают проблемы:

  1. Когда у меня есть десятки классов моделей и я использую их во многих местах, мне всегда приходится передавать конвертер каждому классу модели и, очевидно, каждому классу, использующему класс модели. Это похоже на вирус.
  2. Когда я хочу преобразовать строки Json обратно в объекты, я не могу использовать конструктор с внедренной зависимостью, поскольку это преобразователь Json, который создает объекты.

Пример кода (еще не компилируется):

public abstract class JsonObj
{
    private readonly IJsonConverter jsonConverter;
    protected JsonObj(IJsonConverter jsonConverter) => this.jsonConverter = jsonConverter;

    public virtual string ToJson() => jsonConverter.Serialize(this);
    public static JsonObj FromJson(string json, Type type) => jsonConverter.Deserialize(json, type);
    public override string ToString() => ToJson();
}

public class OneOfManyModelObjects : JsonObj
{
    public OneOfManyModelObjects(IJsonConverter jsonConverter) : base(jsonConverter) { }
    public static OneOfManyModelObjects FromJson(string json) => FromJson(json, typeof(OneOfManyModelObjects)) as OneOfManyModelObjects;
}
...