应用重启后List与EFCore的Bson反序列化错误

问题描述 投票:0回答:1

使用 C#、带有身份验证的 ASP.NET Core、MongoDB.Driver 和 MongoDB.EntityframeworkCore 来处理项目。 我试图将用户 ID 作为字符串存储在购物车中,并使用该数据查找购物车。我设法将商品添加到购物车,当我转到购物车页面并调用 get 方法时,它成功地找到了购物车,没有任何问题。问题是,如果我重新启动应用程序,使用用户登录并再次转到购物车页面,我会收到 Bson desalization 错误:

BsonSerializationException:未知的鉴别器值“List`1”。

这是当我在重新启动应用程序后收到反序列化错误时调用 FirstOrDefaultAsync 方法时。

GetItems 代码:

public async Task<CartDto> GetItems()
{
    var user = signInManager.Context.User.Identity;
    if (user is not null && user.IsAuthenticated)
    {
        var identity = System.Security.Claims.ClaimTypes.NameIdentifier;
        var userId = signInManager.Context.User.FindFirst(identity)?.Value;

        var userCart = await context.Cart.FirstOrDefaultAsync(c => c.UserId == userId);
        if (userCart is not null)
        {
            CartDto cartDto = new()
            {
                Id = userCart.Id.ToString(),
                UserId = userCart.UserId,
                Products = userCart.Products
            };
            return cartDto;
        }
    }
}

Cart 类,存储在 MongoDB 中:

[Collection("Cart")]
public class Cart
{
    public ObjectId Id { get; set; }
    public required string UserId { get; set; }
    public List<string> Products { get; set; }
}
c# mongodb entity-framework serialization bson
1个回答
0
投票

从版本 7.0.0-preview.1 开始,MongoDB 实体框架提供程序似乎不正确地序列化

List<T>
,因此列表项以以下形式序列化,而不是序列化纯字符串:

{
  // ...
  "Products": {
    "_t": "List`1",
    "_v": [
      "Test1",
      "Test2"
    ]
  }
}

反序列化时,提供程序期望数组中包含纯字符串值,但遇到

_t
类型鉴别器,从而引发错误。

Jira 票证描述了相关问题。

© www.soinside.com 2019 - 2024. All rights reserved.