在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
转换器不好用,谁能指出有什么简单的抽象方法?
你可以达到你想要的效果。你需要切换到NewtonsoftJson序列化。
在Startup.cs的ConfigureServices方法中调用。
services.AddControllers().AddNewtonsoftJson();
在这之后,你的构造函数会被带有私有setter的类的反序列化调用。
不需要自定义转换器。
作为参考,我使用的是ASP Net Core 3.1。