我正在创建一个 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