我有以下代码:
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”:“名称”, “ OrderType”:“ type”}]'对于目标位置无效。
*
但是当我使用如下的具体类集合而不是接口时:
public class Customer
{
public string CustomerName { get; set; }
public List<Order> Orders { get; set; }
}
然后正常工作。 我深入研究了jsonpatchdocument,发现它无法为接口创建实例,这是明显的错误,即
无法创建IOrderContract类型的实例。类型是接口 或抽象类,并且无法实例化。
还有其他解决方案可以通过接口实现补丁转换吗?