DBContext i的OnModelCreating方法中指定了转换选项:

modelBuilder.Entity<Game>()
    .Property(g => g.Players)
    .HasColumnName("Players")
    .HasColumnType("BLOB")
    .HasConversion(
        v => JsonSerializer.Serialize(v, options),
        s => JsonSerializer.Deserialize<Dictionary<string, Player>>(s, options)!,
        ValueComparer.CreateDefault(typeof(Dictionary<string, Player>), true));

Player class

public class Player {
    public string UserID;
    public string UserName;
    public string UserToken;
    public byte InGameOrder;
    public string Team;
    public List<Cards> Hand;
    public Player(string id, string name, string token, int inGameOrder) {
        UserID = id;
        UserName = name;
        UserToken = token;
        InGameOrder = (byte)inGameOrder;
        Team = new string[] { "red", "black" }[inGameOrder % 2];
        Hand = new(8);
    }
    public Player()
    {
        
    }
}

How I add players:

var gameFound = await db.Games.FindAsync(sessionName);

if (gameFound.Players.Count() == 0)
{
    gameFound.Players.Add(userToken, new Player(userID, userName, userToken, 1));
}
else
{
    var prevPlayerInGameOrder = gameFound.Players.Values.Select(p => p.InGameOrder).Max();
    gameFound.Players.Add(userToken, new Player(userID, userToken, userName, prevPlayerInGameOrder + 1));
}

db.Games.Update(gameFound);
int affected = await db.SaveChangesAsync();

但数据库中我的球员字典的值是空的:

{"667440114":{},"181308099":{},"1326342467":{}}

我已经有了"类型的反序列化构造函数中的每个参数必须在反序列化时绑定到对象属性或字段",所以我在Player个类中添加了一个无参数的ctor

我想,我需要在序列化参数中指定ctor为Player

推荐答案

Player个类的字段转换为属性(新增Get Set)

现在,它起作用了

{"1812734613":{"UserID":null,"UserName":null,"UserToken":null,"InGameOrder":0,"Team":null,"Hand":null},"601428614":{"UserID":"aerge","UserName":"601428614","UserToken":"rasse","InGameOrder":1,"Team":"black","Hand":[]}}

Csharp相关问答推荐

如何使用Automapper映射两个嵌套列表

等待限制选项似乎不适用于频道

EF Core 8—应用客户端投影后无法转换集操作

"virtual"修饰符对接口成员有什么影响?

. NET WireMock拒绝PostAsJsonAsync序列化

`Task`只有在C#中等待时才会运行吗?

实现List T,为什么LINQ之后它不会返回MyList?<>(无法强制转换WhereListIterator `1类型的对象)'

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

如何在C#中使用Postman中的本地IP向本地主机上运行的本地API发出请求

由于POST中的应用程序/JWT,出现不支持的内容类型异常

正确处理嵌套的本机集合

ASP.NET Core MVC将值从视图传递到控制器时出现问题

为什么方法的值在SELECT方法中不会更改?

在implementationFactory中避免循环依赖

如何使用ODP.NET C#设置Oracle会话时间长度限制

C#命名管道-编码错误?

在.NET Maui中,Flyoutindow/Hamburger菜单可以在shell 之外实现吗?

如何将 colored颜色 转换为KnownColor名称?

客户端/服务器RPC如何处理全局变量?

分别切换用于读取和写入的EF核心日志(log)