簡體   English   中英

檢測到不支持的可能的對象循環

[英]A possible object cycle was detected which is not supported

我知道這里有關於那個特定問題的問答,但我的問題並不獨特(我猜)。

這是我的模型類:

public class RoleMaster
{
    [Key]
    [Required]
    public int Id { get; set; }

    [Required]
    [StringLength(20)]        
    public string Role { get; set; }
}

這是我的控制器:

public class RolesController : ControllerBase
{
    private readonly IRolesRepository _repo;


    public RolesController(IRolesRepository repo)
    {
        _repo = repo;
    }


    [HttpGet]
    public IActionResult Get()
    {
        var roles = _repo.GetRoles();
        return new JsonResult(roles);
    }
}

我的存儲庫:

public interface IRolesRepository
{
    Task<IEnumerable<RoleMaster>> GetRoles();
}

這是 GetRoles 方法:

public async Task<IEnumerable<RoleMaster>> GetRoles()
    {
        try
        {
            var roles = await db.RoleMaster.AsNoTracking().ToListAsync();

            return roles;
        }
        catch (Exception)
        {
            throw;
        }
    }

這是我得到的錯誤:

處理請求時發生未處理的異常。 JsonException: 檢測到不支持的可能的對象循環。 這可能是由於循環或對象深度大於最大允許深度 32。 System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerCycleDetected(int maxDepth)

從其他問題我發現,如果您有其他表的引用,那么可能會發生這種錯誤,但在我的情況下,不涉及其他表。 這是我創建的第一個表,只是在嘗試 get 方法。

_repo.GetRoles(); 未使用await關鍵字

這個var roles = _repo.GetRoles();

應該

var roles = await _repo.GetRoles();

你混合異步和非異步,

下面未經測試,但你應該得到 jist

  [HttpGet]
    public  async Task<IActionResult> Get()
    {
        var roles = **await** _repo.GetRoles();
        return new JsonResult(roles);
    }

原答案是:

僅供參考 - 我原來的答案實際上是正確的.... objectA 是... Task ,因為那是從_repo.GetRoles();返回的_repo.GetRoles();

您的對象 A 引用了引用對象 A 的對象 B。

這只是以遞歸循環結束,基本上永遠不會結束嘗試序列化。

可能的對象循環

此外,您沒有包含可能拋出 JsonResult 異常的代碼,因此看不到您使用的序列化程序。

此外,如果您使用的是 newtonJson,那么對復雜對象的支持就更加有限。

進一步 - 只是一個基於 q 的 FYI 注釋非異步版本,因為如果你不想改變它,你的主(控制器)線程不是異步的,如上所述或為了清楚起見

public List<RoleMaster> GetRoles()
{
    try
    {
        var roles =  db.RoleMaster.AsNoTracking().ToList();
        return roles;
    }
    catch (Exception)
    {
        throw;
    }
}

更新以獲取更多指導

https://docs.microsoft.com/en-us/aspnet/core/web-api/action-return-types?view=aspnetcore-3.1

我有同樣的問題。

這就是解決我的問題的原因:

將 JsonIgnore 屬性放在引用屬性上(導致無休止的序列化)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM