C# WebApi可以';t序列化实体框架实体
我正在处理一个WebApi项目,我想序列化一个C# WebApi可以';t序列化实体框架实体,c#,entity-framework,asp.net-web-api,C#,Entity Framework,Asp.net Web Api,我正在处理一个WebApi项目,我想序列化一个列表,并将其发送回用户。但它只返回[{“$id”:“1”}],其中User是由实体框架数据库第一个模型类生成的实体 控制器: public List<User> GetAllUsers() { List<User> Users = Common.Framework.Persistence.PersistSvr<Business.Entity.User> .GetA
列表
,并将其发送回用户。但它只返回[{“$id”:“1”}]
,其中User
是由实体框架数据库第一个模型类生成的实体
控制器:
public List<User> GetAllUsers()
{
List<User> Users = Common.Framework.Persistence.PersistSvr<Business.Entity.User>
.GetAll().ToList();
return Users;
}
我已经将这些代码行添加到WebApiConfig.cs文件中
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
它刚刚解决了双重序列化问题。我有我的老毛病。
当我向ActionMethod发送请求时,我将收到$id:“1”
我知道这是因为EntityFramework。因为WebApi无法序列化EntityFramework实体(我认为这是因为模型中存在的关系)
那我该怎么解决呢?
我不想全部重写。试试这个
public IHttpActionResult GetAllUsers()
{
try
{
List<User> Users = Common.Framework.Persistence.PersistSvr<Business.Entity.User>
.GetAll().ToList();
return Ok(Users);
}
catch (Exception ex)
{
return Content(HttpStatusCode.InternalServerError, ex.Message);
}
}
public IHttpActionResult GetAllUsers()
{
尝试
{
列表用户=Common.Framework.Persistence.persissvr
.GetAll().ToList();
返回Ok(用户);
}
捕获(例外情况除外)
{
返回内容(HttpStatusCode.InternalServerError,ex.Message);
}
}
您将在用户中得到json响应以及状态代码。发布apicontroller方法工具,就像手动序列化为json但返回XML一样。向我们展示您是如何做到这一点的。@RezaNoei您需要做的第一件事是配置web api以返回json,同时摆脱双重序列化:这是我的控制器:public JsonResult GetAllUsers(){List Users=Common.Framework.Persistence.PersistSvr.GetAll().ToList();返回json(Users)当我从控制器中删除JsonResult时。我收到一个错误:
ObjectContent 1类型未能序列化内容类型application/xml的响应体;charset=utf-8.
当我从控制器中删除JsonResult时。我收到一个错误:ObjectContent 1类型未能序列化内容类型application/xml的响应体;charset=utf-8.
不要删除JsonResult
而是
当我这样做时,我会遇到另一个问题:使用泛型类型“JsonResult”需要1个类型参数
我想,真正的问题是关于Entityframework
我会在回答中解释它。抱歉,我检查了你是对的。在API中,它确实需要,无论如何,我已经改变了我的解决方案,它将工作。
public IHttpActionResult GetAllUsers()
{
try
{
List<User> Users = Common.Framework.Persistence.PersistSvr<Business.Entity.User>
.GetAll().ToList();
return Ok(Users);
}
catch (Exception ex)
{
return Content(HttpStatusCode.InternalServerError, ex.Message);
}
}