在 Web API 2 实体框架中显示相关数据



我的 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 });

最新更新