Type是接口或抽象类,无法实例化。 c#发送一个包含抽象对象列表的对象

我有一个抽象的超类“ 出版物 ”,它有两个派生类拍卖购买 。 此外,我有一个类别 ,其中包含一个出版物列表。

在我的Rest服务器端,我发送了一个Category列表,在客户端,我收到了这个Category列表,并尝试将该对象转换为Categories列表。 问题是当我尝试转换对象时,我得到以下错误:

无法创建FrontOffice.Models.Publication类型的实例。 Type是接口或抽象类,无法实例化。 路径'[0]。出版物[0]。价格’

我将在下面粘贴,我正在使用的代码。

//Rest Server Controller public IEnumerable GetAllCategory() { return listCategory; } //Category Class public class Category { public string Name { get; set; } public List Publications { get; set; } } //Publication Entity [DataContract] [KnownType(typeof(Auction))] [KnownType(typeof(Buyout))] public abstract class Publication { [DataMember] public int PublicationID { get; set; } [DataMember] public string Title { get; set; } public Publication() {} public Publication(int PublicationID, string Title, string Description) { this.PublicationID = PublicationID; this.Title = Title; } } 

在客户端我做:

 List listCategory = new List(); HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:50687/"); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("Application/json")); HttpResponseMessage response = client.GetAsync("api/categories/GetAllcategory").Result; if (response.IsSuccessStatusCode) { listCategory = response.Content.ReadAsAsync<List>().Result; } 

我在尝试实例listCategory的行中收到错误。

您收到AggregateException的原因是您正在调用异步方法( ReadAsAsync ):

 listCategory = response.Content.ReadAsAsync>().Result; 

在异步代码中,您可以(排序)运行多行并行代码。 这些代码行中的任何一行都可以抛出exception,由于这种性质,抛出exception的异步方法将抛出AggregateException 。 此exception的目的是收集或聚合“并行”代码行可能引发的所有exception。

然而正如@Matthew Haugen指出的那样,99%的AggregateExceptions只包装一个例外。 你要做的是

  1. 找到包含在其中的exception,并且
  2. 要么弄清楚为什么会抛出exception,要么将其发布在你的问题中并寻求更多帮助。

最重要的是,问题可能是代码中的众多问题之一,需要更多信息才能解决问题。 由于只有当Category.Publications不为null时才会发生exception,我想知道你是否在使用延迟加载的EntityFramework? 如果是这样,它可能是类别和出版物之间的外键问题。 但那只是在黑暗中刺伤。