相关疑难解决方法(0)

检测到实体框架自引用循环

我有一个奇怪的错误.我正在试验.NET 4.5 Web API,实体框架和MS SQL Server.我已经创建了数据库并设置了正确的主键和外键以及关系.

我创建了一个.edmx模型并导入了两个表:Employee和Department.一个部门可以有很多员工,这种关系存在.我使用scaffolding选项创建了一个名为EmployeeController的新控制器,以使用Entity Framework创建一个带有读/写操作的API控制器.在向导中,选择Employee作为模型,并选择数据上下文的正确实体.

创建的方法如下所示:

public IEnumerable<Employee> GetEmployees()
{
    var employees = db.Employees.Include(e => e.Department);
    return employees.AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)

当我通过/ api/Employee调用我的API时,出现此错误:

'ObjectContent`1'类型无法序列化内容类型'application/json的响应主体; ... ... System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"发生错误.","ExceptionMessage":"使用类型'System.Data.Entity.DynamicProxies检测到自引用循环.Employee_5D80AD978BC68A1D8BD675852F94E8B550F4CB150ADB8649E8998B7F95422552' .Path'[0] .Department.Employees'.","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":"...

为什么它自引用[0] .Department.Employees?这并没有多大意义.如果我在我的数据库中进行循环引用,我希望这会发生,但这是一个非常简单的例子.怎么可能出错?

c# serialization entity-framework-4 asp.net-web-api

100
推荐指数
10
解决办法
9万
查看次数

检测到JSON.Net自引用循环

我在4个表中为我的网站提供了一个mssql数据库.

我用这个时:

public static string GetAllEventsForJSON()
{
    using (CyberDBDataContext db = new CyberDBDataContext())
    {
        return JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), new JavaScriptDateTimeConverter());
    }
}
Run Code Online (Sandbox Code Playgroud)

该代码导致以下错误:

Newtonsoft.Json.JsonSerializationException:为类型为"DAL.Cyber​​User"的属性"Cyber​​User"检测到自引用循环.路径'[0] .EventRegistrations [0] .Cyber​​User.UserLogs [0]'.

c# serialization json.net

94
推荐指数
8
解决办法
10万
查看次数

无法在Web API中序列化响应

我正在使用ASP.NET MVC Web API,我遇到了这个错误:

'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8' .

我的控制器是:

public Employee GetEmployees()
{
    Employee employees = db.Employees.First();
    return employees;
}
Run Code Online (Sandbox Code Playgroud)

为什么我收到这个错误?

c# serialization asp.net-web-api

84
推荐指数
7
解决办法
9万
查看次数

检测到自引用循环 - 从WebApi返回数据到浏览器

我正在使用Entity Framework并且在向浏览器中获取父数据和子数据时遇到问题.这是我的课程:

 public class Question
 {
    public int QuestionId { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}

public class Answer
{
    public int AnswerId { get; set; }
    public string Text { get; set; }
    public int QuestionId { get; set; }
    public virtual Question Question { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下代码返回问题和答案数据:

    public IList<Question> GetQuestions(int subTopicId, int questionStatusId)
    {
        var questions = _questionsRepository.GetAll()
            .Where(a => a.SubTopicId == subTopicId …
Run Code Online (Sandbox Code Playgroud)

c# serialization entity-framework json.net asp.net-web-api

78
推荐指数
6
解决办法
8万
查看次数

Asp.Net Web API错误:'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8'

最简单的例子,我得到一个集合并尝试通过Web API输出:

// GET api/items
public IEnumerable<Item> Get()
{
    return MyContext.Items.ToList();
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:


'System.Data.Objects.ObjectQuery`1 [Dcip.Ams.BO.EquipmentWarranty]' 类型的对象 无法转换为类型
'System.Data.Entity.DbSet`1 [Dcip.Ams.BO.EquipmentWarranty]'

这是与新代理相关的一个非常常见的错误,我知道我可以通过设置来修复它:

MyContext.Configuration.ProxyCreationEnabled = false;
Run Code Online (Sandbox Code Playgroud)

但这违背了我想要做的很多事情的目的.有没有更好的办法?

entity-framework entity-framework-4 asp.net-web-api

35
推荐指数
5
解决办法
4万
查看次数

在ASP.NET Core中检测到自引用循环

当我尝试使用ASP.NET Core Newsoft JSON.NET序列化某些域对象时,它会抛出异常,因为它正在检测自引用循环.

在ASP.NET 4中,我们以这种方式全局修复它: JSON.NET错误检测到类型的自引用循环

我们如何在ASP.NET Core中解决这个问题?

json.net asp.net-core-mvc asp.net-core

34
推荐指数
1
解决办法
3万
查看次数

将类转换为另一个类或将类转换为另一个类

我的问题显示在此代码中

我有这样的课

public class  maincs
{
  public int a;
  public int b;
  public int c;
  public int d; 
}

public class  sub1
{
  public int a;
  public int b;
  public int c;
}


public void methoda (sub1 model)
{
  maincs mdata = new maincs(){a = model.a , b = model.b , c= model.c} ;   

  // is there is a way to directly cast class sub1 into main like that    
  mdata = (maincs) model;    
}
Run Code Online (Sandbox Code Playgroud)

c# casting class type-conversion

33
推荐指数
4
解决办法
10万
查看次数

在Json.net中序列化一对多关系

我首先使用Entity Framework代码进行数据访问,并且我有一个具有Employees集合的Company类.Employee类还有一个Company属性.

我希望能够序列化公司并在序列化中包含员工列表.

这是公司:

public class Company
{
public long Id { get; set; }
public string Name { get; set; }
public DateTime? Established { get; set; }

public virtual IList<Employee> Employees { get; set; }

public DateTime? DateCreated { get; set; }
public DateTime? DateUpdated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是员工

public class Employee
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int …
Run Code Online (Sandbox Code Playgroud)

serialization entity-framework json.net ef-code-first

19
推荐指数
4
解决办法
1万
查看次数

在Json.NET序列化中忽略基类属性

我有以下类结构:

[JsonObject]
public class Polygon : IEnumerable<Point>
{
    public List<Point> Vertices { get; set; }
    public AxisAlignedRectangle Envelope { get; set; }
}

public class AxisAlignedRectangle : Polygon {
    public double Left { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在序列化这个Polygon类,但是当我这样做时,我得到一个JsonSerializationException消息"为属性'Envelope'检测到自我引用循环',类型为'MyNamespace.AxisAlignedRectangle'." 如果我将[JsonObject(IsReference = true)](如此处所述)添加到AxisAlignedRectangle,代码运行正常,但我在AxisAlignedRectangle的每个实例中获得一个自动分配的$ id字段,并在重新引用该实例时获得$ ref字段.例如,当我序列化多边形时,我得到:

{
    Vertices: [ ... ],
    Envelope: {
        $id: '1',
        Left: -5,
        ...
        Vertices: [ ... ],
        Envelope: {
            $ref: '1'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望在序列化AxisAlignedRectangle时完全删除Polygon属性.我尝试DataContractAttribute在AxisAlignedRectangle类中添加一个(以及适当的DataMemberAttribute属性),但Polygon的所有属性仍然被序列化.这是意料之外的,因为 …

c# serialization json json.net

11
推荐指数
3
解决办法
9222
查看次数

如何进行JSON序列化程序忽略导航属性?

我正是在这个问题的相同情况下: 我如何使JSON.NET忽略对象关系?

我看到提议的解决方案,我知道我必须使用合同左轮手枪,我也看到合同解析器的代码,但我不知道如何使用它.

  • 我应该在WebApiConfig.vb中使用它吗?
  • 我应该修改我的实体模型吗?

vb.net json asp.net-web-api

8
推荐指数
2
解决办法
4078
查看次数