4

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

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

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

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

我最好的选择是什么?

4

2 回答 2

3

在您的返回值中“选择”一种新类型

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

或(仅供参考 - 我会为 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);
}
于 2012-06-18T22:53:43.377 回答
2

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

dbContext.Configuration.LazyLoadingEnabled = false;
// now load your data and return them to serialization
于 2012-06-19T07:59:08.437 回答