DDD ValueObject和Enumeration ,有没有什么好的方法来实现序列化?

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

在DDD中。价值对象枚举 是非常漂亮的,所以我想在日常的程序逻辑中使用这两个对象,而不仅仅是领域逻辑。当使用自定义的值对象和枚举时,序列化的问题就来了:我是否应该将所有的值对象和枚举都用 System.Text.Json.JsonConverter<T> 或者有什么好办法来处理序列化和反序列化?

更新:为了让大家明白。Eumeration 演示如下(ValueObject 派生类是一样的)。)

[JsonConverter(typeof(CustomizedConverter))]
public class CustomizedEnumeration1 : Enumeration 
{
     public string Customized { get; protected set; }

     public ... // some other customized property or class

     public CustomizedEnumeration(int id, string name, string customized) : base(id, string) {
        Customized = customized;
     } 
}

public class Customized2 : Enumeration 
{ ... }

public class OtherCustomized: Enumeration 
{ ... }

在DDD中,属性有时是通过 protected/private setter,反序列化没有权利设置值。许多派生类不能像预期的那样进行反序列化,所以我们必须用以下方法重写序列化 System.Text.Json.JsonConverter<T> 逐一重写每一个派生的 Enumeration Valueobject 转换器不好用,谁能指出有什么简单的抽象方法?

serialization domain-driven-design enumeration
1个回答
0
投票

你可以达到你想要的效果。你需要切换到NewtonsoftJson序列化。

在Startup.cs的ConfigureServices方法中调用。

services.AddControllers().AddNewtonsoftJson();

在这之后,你的构造函数会被带有私有setter的类的反序列化调用。

不需要自定义转换器。

作为参考,我使用的是ASP Net Core 3.1。

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