我的 asp.net MVC应用程序的Web API部分遇到了一些问题。使用 MVC 控制器和视图时,应用程序工作正常,但是当尝试通过我的 web api 2 控制器返回订单及其 OrderItem 时,我收到以下错误消息:
"对象内容"1"类型无法序列化内容类型"应用程序/xml"的响应正文;字符集=UTF-8'。
我发现菜单项的序列化有问题。我尝试从类中删除 Virtual-关键字并使用 Include 手动包含菜单项,但仍然收到相同的错误。
我是否需要为此创建一个视图模型来返回数据?我也尝试了 JSON.NET 并得到相同的错误。
我有以下课程:
public class Order
{
public int Id { get; set; }
public DateTime OrderDate { get; set; }
public virtual ICollection<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
public int Id { get; set; }
public decimal UnitPrice { get; set; }
public int Quantity { get; set; }
public int Discount { get; set; }
public virtual Order Order { get; set; }
public virtual MenueItem MenueItem { get; set; }
}
public class MenueItem
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Description { get; set; }
public DateTime CreateDate { get; set; }
public DateTime LastChanged { get; set; }
public bool IsActive { get; set; }
public virtual ICollection<OrderItem> OrderItems { get; set; }
}
而控制器方法:
// GET: api/Orders
public IQueryable<Order> GetOrders()
{
var orders = db.Orders.Include(c => c.OrderItems);
return orders;
}
您可以指定转换器以忽略循环引用,如下所示:
var orders = JsonConvert.SerializeObject(db.GetOrders(), new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });