【发布时间】:2017-05-04 10:58:36
【问题描述】:
有时,也许在 DDD 的情况下,您可能希望使用 C# 创建值对象来表示数据,以便为您的域赋予比使用原始类型更多的意义,并具有不可变的额外好处。
例如:
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 可能是前进的方向?
【问题讨论】:
-
我回答了“重复”问题,stackoverflow.com/a/48005782/442459。我不相信这些问题是完全一样的。但是答案有一个通用的方法来解决这个问题。
-
另请参阅我在“重复”问题中的回答,使用反射:stackoverflow.com/a/52333106/20444
标签: c# serialization json.net