DDD ValueObject и Enumeration, есть ли хороший способ реализовать сериализацию? - PullRequest
0 голосов
/ 17 апреля 2020

В DDD, Объект значения и Перечисление довольно красиво, так что я хочу использовать оба в ежедневных логах программы c, а не только доменные логики c , Когда используются настраиваемые объекты значений и перечисления, возникает проблема сериализации: должен ли я реализовать все объекты значений и перечисления с помощью System.Text.Json.JsonConverter<T>, или есть какой-нибудь хороший способ обработки сериализации и десериализации?

Обновление:
чтобы прояснить ситуацию, Eumeration демо, как показано ниже (ValueObject производные классы одинаковы.):

[JsonConverter(typeof(CustomizedConverter))]
public class CustomizedEnumeration1 : Enumeration 
{
     public string Customized { get; protected set; }

     public ... // some other customized property or class

     public CustomizedEnumeration(int id, string name, string customized) : base(id, string) {
        Customized = customized;
     } 
}

public class Customized2 : Enumeration 
{ ... }

public class OtherCustomized: Enumeration 
{ ... }

В DDD свойства иногда закрываются protected/private setter, десериализация не имеет права на установить значение. Многие производные классы не могут десериализоваться должным образом, поэтому мы должны переписать сериализацию с System.Text.Json.JsonConverter<T> один за другим. переписать каждый производный конвертер Enumeration / Valueobject нехорошо, может ли кто-нибудь указать на простую абстракцию для этого?

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете достичь желаемого результата. Вам необходимо переключиться на сериализацию Newtonsoft Json.

Вызвать это в Startup.cs в методе ConfigureServices:

services.AddControllers().AddNewtonsoftJson();

После этого ваш конструктор будет вызываться десериализацией для классов с частный сеттер.

Нет необходимости в пользовательских преобразователях.

Для справки я использую ASP Net Core 3.1

...