首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Web API 2实体框架中显示相关数据

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

Stack Overflow用户
提问于 2017-03-29 04:25:01
回答 1查看 231关注 0票数 0

我的asp.net MVC应用程序的Web API部分有一些问题。该应用程序在使用MVC控制器和视图时运行良好,但当尝试通过我的web api 2控制器返回订单及其OrderItem时,我收到以下错误消息:

“ObjectContent`1”类型无法序列化内容类型“application/xml;charset=utf-8”的响应正文。

我想可能是MenuItems的序列化有问题。我尝试从类中删除Virtual-keyword,并使用Include手动包含MenuItems,但仍然得到相同的错误。

为了返回数据,我需要为此创建一个ViewModel吗?我也尝试过JSON.NET,也得到了同样的错误。

我有以下几个类:

代码语言:javascript
复制
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; }
}

和控制器方法:

代码语言:javascript
复制
    // GET: api/Orders
    public IQueryable<Order> GetOrders()
    {
        var orders = db.Orders.Include(c => c.OrderItems);
        return orders;
    }
EN

回答 1

Stack Overflow用户

发布于 2017-03-29 18:42:33

您可以指定转换器忽略循环引用,如下所示:

代码语言:javascript
复制
var orders = JsonConvert.SerializeObject(db.GetOrders(), new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43079269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档