Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebApi可以';t序列化实体框架实体_C#_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# WebApi可以';t序列化实体框架实体

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

我正在处理一个WebApi项目,我想序列化一个
列表
,并将其发送回用户。但它只返回
[{“$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);

            }
        }