【发布时间】:2017-03-28 20:25:01
【问题描述】:
我的 asp.net MVC 应用程序的 Web API 部分存在一些问题。该应用程序在使用 MVC 控制器和视图时工作正常,但是当尝试通过我的 web api 2 控制器返回订单及其 OrderItem 时,我收到以下错误消息:
“ObjectContent`1”类型无法序列化内容类型“application/xml”的响应正文;字符集=utf-8'。
我认为 MenuItem 的序列化有问题。我尝试从类中删除 Virtual-keyword 并使用 Include 手动包含 MenuItems,但仍然得到相同的错误。
我是否需要为此创建一个 ViewModel 来返回数据?我也试过 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;
}
【问题讨论】:
-
有一个循环引用
MenueItem-OrderItems即使没有发生延迟加载。您可以告诉序列化程序忽略引用循环。 -
感谢您的回复。我现在正在测试 AutoMapper,可能会走这条路,但是你会如何忽略参考循环?
标签: c# asp.net asp.net-mvc entity-framework rest