Как применить документ исправления 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

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