当前位置: 首页 > 面试题库 >

Json序列化类型的对象时检测到循环引用

凌俊名
2023-03-14
问题内容

上课:

public class Parent
{
    public int id {get; set;}
    public int name {get; set;}

    public virtual ICollection<Child> children {get; set;}
}

[Table("Child")]
public partial class Child
{
    [Key]
    public int id {get; set;}
    public string name { get; set; }

    [NotMapped]
    public string nickName { get; set; }
}

控制器代码:

List<Parent> parents = parentRepository.Get();
return Json(parents);

它适用于LOCALHOST,但不适用于实时服务器:

错误: Json序列化类型的对象时检测到循环引用

我进行了搜索并找到了[ScriptIgnore]属性,因此将模型更改为

using System.Web.Script.Serialization;

public class Parent
{
    public int id {get; set;}
    public int name {get; set;}

    [ScriptIgnore]
    public virtual ICollection<Child> children {get; set;}
}

但是在实时服务器(win2008)上也会发生相同的错误。

如何避免该错误并成功序列化父数据?


问题答案:

尝试以下代码:

return Json(
    parents.Select(x => new {
        id = x.id,
        name = x.name,
        children = x.children.Select(y => new {
            // Assigment of child fields
        })
    }));

…或者如果您仅需要父属性:

return Json(
    parents.Select(x => new {
        id = x.id,
        name = x.name
    }));

它并不是解决问题的真正方法,但在序列化DTO时是一种常见的解决方法。



 类似资料:
  • 问题内容: 我正在尝试做一个简单的JSON返回,但是我遇到以下问题。 我得到一个HTTP 500,但此问题的标题中显示了例外。我也试过 那也带来了同样的问题。 这是错误还是我的实现? 问题答案: 看来您的对象层次结构中有循环引用,而JSON序列化程序不支持。您是否需要所有列?您只能在视图中选择所需的属性: 这将使您的JSON对象更轻便,更易于理解。如果您有许多属性,则可以使用AutoMapper

  • 问题内容: 所以这是我的交易 楷模 ....以下模型(这些模型已连接到EfDbContext)已连接到以下存储库… 接口/存储库 在我的HomeController()中,我得到了一个JsonResult方法,我想返回上下文。这是方法 杰森请求 我收到以下错误: 序列化类型为’System.Data.Entity.DynamicProxies.News_96C0B16EC4AC46070505EE

  • 我面临一个问题,导致我出现以下错误: 序列化类“App\Entity\User”(配置的限制:1)的对象时检测到循环引用 我有一个拥有任务订单、车辆和用户的企业实体。 与用户、公司和车辆有关系的订单实体。 以及与订单和公司有关系的用户实体。 所以我有这个:enterprise.php ORD.php: 五ehicule.php: User.php: 当我想添加一辆新车时,我会得到以下错误: 序列化

  • 问题内容: 我尝试序列化从实体数据模型.edmx自动生成的POCO类,使用时 我收到以下错误: 错误检测到类型为System.data.entity的自引用循环。 我该如何解决这个问题? 问题答案: 那是最好的解决方案 https://code.msdn.microsoft.com/Loop-Reference-handling-in- caaffaf7 (我选择/尝试了这个,还有很多其他选择)

  • 我有一个看起来很常见的问题,但到目前为止,我还没有找到一个适合我的解决方案。我想我只是错过了一些小事情,但我已经崩溃了,请求帮助。我正在尝试使用flask和pymongo获得json输出。 以下是控制台中使用print(结果)的对象: 当我试图返回时,我得到了错误: TypeError: ObjectId类型的对象不是JSON可序列化的 类联系人(资源): 我试过bson。json_util建议。

  • 问题内容: 我有一个对象(解析树),其中包含子节点,这些子节点是对其他节点的引用。 我想使用序列化此对象,但是我得到了 TypeError:循环对象值 因为我提到的结构。 我该如何解决?对我而言,在序列化对象中是否表示对其他节点的引用并不重要。 另一方面,在创建对象时从对象中删除这些属性似乎很乏味,我也不想对解析器(水仙)进行更改。 问题答案: 使用的第二个参数,该替代品的功能,以排除已序列化对象