Моя модель содержит свойство, которое содержит необработанные значения json. Я использую базовую платформу сущностей 3 и точку net ядро 3.
[Table("test")]
public class PostData
{
[Column("id"), Key]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
[Column("properties"), JsonExtensionData]
public virtual Dictionary<string, object> Properties { get; set; }
}
И я сопоставил в моем контексте БД.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<PostData>(b =>
{
b.Property(u => u.Properties)
.HasConversion(
d => JsonConvert.SerializeObject(d),
s => JsonConvert.DeserializeObject<Dictionary<string, object>>(s)
)
.HasMaxLength(5000)
.IsRequired();
});
}
Итак, когда я публикую данные из asp. net core,
{
"name": "x",
"properties": {
"color": "red",
"size": "L"
}
}
Действие:
[HttpPost("create")]
public async Task<IActionResult> Create([FromBody] PostData data)
{
await using var context = new MyDbContext();
await context.Post.AddAsync(data);
await context.SaveChangesAsync();
return await Task.FromResult(Ok(data));
}
Сохраняет properties
в базе данных вроде следующего.
{"color":{"ValueKind":3},"size":{"ValueKind":3}}
Почему не сериализуется?