У меня есть следующий код:
public class Customer
{
public string CustomerName { get; set; }
[JsonConverter(typeof(ConcreteConverter<Order>))]
public List<IOrderContract> 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<Customer> patchDoc)
{
var customer = CreateCustomer();
patchDoc.ApplyTo(customer);
return new ObjectResult(customer);
}
private Customer CreateCustomer()
{
return new Customer
{
CustomerName = "John",
Orders = new List<IOrderContract>()
{
new Order
{
OrderName = "Order0"
},
new Order
{
OrderName = "Order1"
}
}
};
}
Выдает исключение, что *
Значение '[{"OrderName": "name", "OrderType": "type"}]' недопустимо для целевого местоположения.
*
Но когда я использую коллекцию конкретных классов как показано ниже вместо интерфейса:
public class Customer
{
public string CustomerName { get; set; }
public List<Order> Orders { get; set; }
}
, тогда он работает нормально. Я глубоко погрузился в jsonpatchdocument и обнаружил, что он не может создать экземпляр для интерфейса, что является очевидной ошибкой, т.е.
Не удалось создать экземпляр типа IOrderContract. Тип является интерфейсом или абстрактным классом и не может быть создан.
Есть ли какое-либо другое решение для этого для преобразования патчей с интерфейсами?