簡體   English   中英

JsonConvert.SerializeObject 拋出自引用錯誤

[英]JsonConvert.SerializeObject throwing self referencing error

我正在使用帶有購物車的比薩店工作,該購物車使用會話來存儲購物車並返回它具有通過 AJAX 更新購物車的局部視圖。

直到最近,此方法一直運行良好,我還沒有對該方法或 CartController 本身進行任何特定更改。 但是我一直在管理頁面上添加更多產品,這按預期工作,根本不應該影響這部分。

我已經使用 Visual Studio 來單步執行代碼,它調用正確的方法並獲取正確的值,但它停在這一行 var temp = JsonConvert.SerializeObject(cart); 它拋出 Failed to load resource: 服務器響應狀態 500 () 錯誤,可以在瀏覽器控制台中看到。

完整路徑為:

[https://localhost:44341/cart/product/1?X-Requested-With=XMLHttpRequest&_=1549979834762]
   [Route("product/{id}")]
   public async Task<IActionResult> AddItem(int id)
    {
        var user = await _userManager.GetUserAsync(User);
        if (user == null) Challenge();

        ShoppingCart cart;

        var product = await _dishService.GetDishAsync(id);

        // If shopping cart doesn't exist
        if (HttpContext.Session.GetString("varukorg") == null)
        {
            cart = new ShoppingCart
            {
                Products = new List<Matratt>(),
                User = user,
                Kund = await _userService.FindUserAsync(user.Id)
            };
        }
        else
        {
            // Else get the session and cast it as cart
            var serializedValue = ( HttpContext.Session.GetString("varukorg") );
            cart = JsonConvert.DeserializeObject<ShoppingCart>(serializedValue);
        }
        cart.Products.Add(product);

        // Added product, putting the session back.
        var temp = JsonConvert.SerializeObject(cart);
        HttpContext.Session.SetString("varukorg", temp);
        return PartialView("_CartList", cart);
    }

並且該方法是通過不顯眼的 AJAX 從視圖中調用的,到目前為止,該方法一直運行良好。

<a class="btn btn-sm btn-success"
      data-ajax="true"
      data-ajax-method="GET"
      data-ajax-mode="replace"
      data-ajax-update="#cartList"
      asp-controller="Cart" asp-action="AddItem" asp-route-id="@item.Id">+ 
</a>

和使用的 ViewModel

    public List<Matratt> Products { get; set; }
    public AppUser User { get; set; }
    public Kund Kund { get; set; }
    public bool CalculatedPoints { get; set; }

當我從服務類請求對象時,我也使用了一個通用方法來獲取導航對象,在這種情況下,這似乎是導致自引用錯誤的原因。

return await _context.Matratt
            .Include(m => m.MatrattProdukt)
            .ThenInclude(p => p.Produkt)
            .FirstOrDefaultAsync(m => m.MatrattId == id);

改為僅

 return await _context.Matratt.FirstOrDefaultAsync(p => p.MatrattId == id);

這是購物車唯一真正需要的東西。

暫無
暫無

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

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