有时,也许在DDD情况下,您可能希望使用C#创建值对象来表示数据,为您的域赋予比使用基本类型更多的含义,并带来额外的好处是不可改变的。为值对象自定义NewtonSoft.Json对象序列化
例如:
public class PostalCode // Bit like a zipcode
{
public string Value { get; private set; }
public PostalCode(string value)
{
Value = value;
}
// Maybe sprinkle some ToString()/Equals() overrides here
}
布拉沃。干得好。
的唯一的事情是,当序列化到JSON,你会得到这样的:
{
"Value": "W1 AJX"
}
那种看起来不错,但是当它被用来作为一个对象的属性(比方说一个地址),那么它看起来像这样:
{
"Line1": "Line1",
"Line2": "Line2",
"Line3": "Line3",
"Town": "Town",
"County": "County",
"PostalCode": {
"Value": "W1 AJX"
}
}
采取了极端,你可以看到这里有很多噪音。我想要做的是告诉Newtonsoft.Json,当它看到一种类型的PostalCode
时,它可以将其串行化为一个字符串值(反之亦然)。这将导致以下json:
{
"Line1": "Line1",
"Line2": "Line2",
"Line3": "Line3",
"Town": "Town",
"County": "County",
"PostalCode": "W1 AJX"
}
这是可以实现的吗?我浏览过文档,我怀疑自定义JsonConverter
可能是前进的方向?
我在“重复”问题中回答,https://stackoverflow.com/a/48005782/442459。我不相信这些问题是完全一样的。但答案有一个通用的方法来解决这个问题。 – Lejdholt