【问题标题】:ValueObject json deserialization returns NullValueObject json 反序列化返回 Null
【发布时间】:2019-08-26 04:14:52
【问题描述】:

我正在尝试使用 ef 核心在 asp.net 核心中实现 valueobject。我有金钱作为价值对象,产品有金钱作为价格属性。问题是货币在产品表中被序列化,但反序列化返回 null。我尝试了调试模式,但它甚至没有进入反序列化的货币类。 注意:我使用 [NotMapped] 是因为迁移给了我金钱需要主键的错误,但我不需要钱表,我希望将钱序列化为产品表中的价格字段。 我的金钱模式:

[NotMapped]
public class Money
{
    public static readonly Money Empty = new Money(0);
    public decimal Value { get; private set; }

    protected Money()
    {
    }

    public Money(decimal value) : this()
    {
        if (value < 1)
            throw new Exception("value is invalid");
        Value = value;
    }
  }

我的产品型号:

public class Product
 {
    public Product()
    {

    }
    public Product(string name, decimal price)
    {
        if (string.IsNullOrEmpty(name))
            throw new Exception("Name is invalid");
        Name = name;
        Price = new Money(price);
    }
    public int Id { get; private set; }
    public string Name { get; private set; }

    public Money Price { get; private set; }
  }

我的数据库上下文:

public class StoreDbContext:DbContext
  {
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=XXX;initial catalog=Basket2;integrated security=true");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new ProductConfiguration());
        //modelBuilder.Entity<Product>()
        //    .HasKey(lc => new { lc.Id });
    }

    public DbSet<Order> Orders{ get; set; }
    public DbSet<OrderLine> OrderLines{ get; set; }
    public DbSet<Product> Products{ get; set; }
  }

我的产品配置:

   public class ProductConfiguration : IEntityTypeConfiguration<Product>
    {

    public void Configure(EntityTypeBuilder<Product> builder)
    {

      var test=  builder.Property(c => c.Price).
            HasConversion(c => JsonConvert.SerializeObject(c), c => JsonConvert.DeserializeObject<Money>(c));


     }
    }

【问题讨论】:

    标签: c# domain-driven-design value-objects


    【解决方案1】:

    SerializeObject 和 DeserializeObject 不能总是成功地理解代码,这就是我们有 ISerializable 接口的原因。我相信,如果您实施它,您的问题将得到解决。请查看以下链接:

    Implementing ISerializable

    Newtonsoft and ISerializable

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多