我正在创建一个ASP.Net Web API来公开现有的数据库,以便与手持设备一起使用。我在Web API,EF和我试图在这个项目上使用的所有其他东西上也相对较新:)
我希望结果数据传输尽可能轻量级,但是当api返回一个对象时,序列化的JSON具有' EntityKey'自身的字段以及与该对象有关系的其他表中的行。
我现在正在尝试使用ADO.NET DbContext模板生成器来生成模型代码。这摆脱了EntityKey字段,但我仍然在JSON中显示关系。
我想要的只是要序列化的对象的字段,并且能够将JSON反序列化为这些对象以进行插入和更新。有内置的方法吗?
我最好的选择是什么?
答案 0 :(得分: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});
}
OR
public object GetBook(int id){
return books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title = Title, price = Price});
}
OR(为了参考起见 - 我使用动态或对象来代替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而不是发布,那么您需要使用
public JsonResult GetBook(int id){
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title = Title, price = Price},JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:2)
关闭延迟加载,除非您使用Include
调用明确加载,否则您的方法不会返回关系:
dbContext.Configuration.LazyLoadingEnabled = false;
// now load your data and return them to serialization