.Net Web API - 实体框架 - 在序列化期间忽略关系



我正在创建一个 ASP.Net Web API 来公开现有数据库以用于手持设备。我对 Web API、EF 以及我尝试在这个项目上使用的其他所有内容也相对较新:)

我希望生成的数据传输尽可能轻量级,但是当 api 返回对象时,序列化的 JSON 具有自身和对象有关系的其他表中的行的"EntityKey"字段。

我现在尝试使用 ADO.NET DbContext 模板生成器生成模型代码。这摆脱了实体键字段,但我仍然在 JSON 中显示关系。

我想要的只是要序列化的对象中的字段,并能够将 JSON 反序列化为这些对象以进行插入和更新。有没有内置的方法可以做到这一点?

我最好的选择是什么?

返回值中"选择"一个新类型

return ienumfromedmx.Select(o=> new { id = id, value = value, name = name});

其中这些是您要返回的值

如果您发布一些示例代码,则为您提供更相关的代码示例可能会更容易

使用您的图书

public Book GetBook(int id) { return books.SingleOrDefault(b => b.Id == id);}

更改为

public dynamic GetBook(int id){
return books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price});
}

public object GetBook(int id){
return books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price});
}

OR(为了参考 - 我会使用 dynamic 或对象作为 api 而不是 JsonResult)

public JsonResult GetBook(int id){
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price}));
}

注意 如果您正在使用

public JsonResult GetBook(int id){
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price}));
}

如果你使用的是httpget而不是post,那么你需要使用

public JsonResult GetBook(int id){
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price},JsonRequestBehavior.AllowGet);
}

关闭延迟加载,您的方法将不会返回关系,除非您使用Include调用显式加载它们:

dbContext.Configuration.LazyLoadingEnabled = false;
// now load your data and return them to serialization

最新更新