Обновление: Мой оригинальный ответ (см. Далее ниже) состоял в том, что это невозможно, однако, это действительно зависит от библиотеки сериализации, используемой в вашем проекте.
Например, Json.NET от Newtonsoft позволяет вам устанавливать некоторые свойства вашего класса через конструктор (примечание: если ваш класс содержит более одного конструктора, примените атрибут JsonConstructorAttribute):
public class Price
{
[JsonConstructor]
public Price(decimal amount, string currency)
{
Amount = amount;
Currency = currency;
}
public decimal Amount { get; private set; }
public string Currency { get; private set; }
}
Оригинальный ответ
Нет, это невозможно.Потому что, если вы сохраняете свои свойства закрытыми и просто инициализируете их через конструктор, ваш десериализатор не будет знать, как эти свойства должны быть сопоставлены с вашей моделью бэкэнда (DTO).
Поэтому при работе с DTO вы обычно не делаетесмотрите, как инициализируются с помощью конструктора.
Кроме того, поскольку вы используете класс Price во всем коде, вы смешиваете свою «модель домена» с «моделью представления» (= моделью, которую вы используете для связи с клиентом).) - это прагматичный подход, но не пропагандируемый в таких стилях, как DDD.В таком случае, если вам нужны разные свойства или разные модификаторы доступа для ваших свойств, вы должны создать выделенное PriceDTO, которое сопоставляется с вашей сущностью Price, но имеет общедоступные установщики и получатели.
Другой вариант - разделитьМодель, используемая конечной точкой, которая отправляет данные клиенту (через GET) из модели, которая используется конечной точкой, которая получает данные в качестве полезной нагрузки для создания или обновления объектов (через POST / PATCH / PUT).Однако это часто происходит за счет избыточности, поскольку модели в обоих случаях часто очень похожи.