Как применить документ исправления JSON к классу, содержащему коллекцию типов интерфейсовC#

Место общения программистов C#
Ответить
Anonymous
 Как применить документ исправления JSON к классу, содержащему коллекцию типов интерфейсов

Сообщение Anonymous »

У меня есть следующий код:

Код: Выделить всё

public class Customer
{
public string CustomerName { get; set; }

[JsonConverter(typeof(ConcreteConverter))]
public List Orders { get; set; }
}

public class Order : IOrderContract {
public string OrderName { get; set; }
public string OrderType { get; set; }
}

public interface IOrderContract
{
string OrderName { get; set; }
string OrderType { get; set; }
}
Когда я применяю патч, используя следующий код:

Код: Выделить всё

 public IActionResult JsonPatchWithoutModelState([FromBody] JsonPatchDocument patchDoc)
{
var customer = CreateCustomer();

patchDoc.ApplyTo(customer);

return new ObjectResult(customer);
}

private Customer CreateCustomer()
{
return new Customer
{
CustomerName = "John",
Orders = new List()
{
new Order
{
OrderName = "Order0"
},
new Order
{
OrderName = "Order1"
}
}
};
}
Выдается исключение, что
*


Значение '[ {
"OrderName": "name",
"OrderType": "type" } ]' недопустимо для целевого местоположения.

*

Но когда я использую коллекцию конкретных классов вместо интерфейса:

Код: Выделить всё

public class Customer
{
public string CustomerName { get; set; }

public List Orders { get; set; }
}
тогда все работает нормально.
Я глубоко углубился в jsonpatchdocument и обнаружил, что невозможно создать экземпляр для интерфейса, что является очевидной ошибкой, т.е.


Не удалось создать экземпляр типа IOrderContract. Тип — это интерфейс
или абстрактный класс, и его экземпляр не может быть создан.


Есть ли какое-либо другое решение для этого добиться преобразования патчей с помощью интерфейсов?

Подробнее здесь: https://stackoverflow.com/questions/612 ... e-collecti
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»