相关疑难解决方法(0)

自定义 NewtonSoft.Json 以进行值对象序列化

有时,也许在 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
}
Run Code Online (Sandbox Code Playgroud)

太棒了。我干得好。

唯一的事情是,当序列化为 Json 时,您会得到:

{
    "Value": "W1 AJX"
}
Run Code Online (Sandbox Code Playgroud)

这种看起来没问题,但是当它用作对象的属性(假设是地址)时,它看起来像这样:

{
  "Line1": "Line1",
  "Line2": "Line2",
  "Line3": "Line3",
  "Town": "Town",
  "County": "County",
  "PostalCode": {
    "Value": "W1 AJX"
  }
}
Run Code Online (Sandbox Code Playgroud)

极端情况下,您可以看到这里有很多噪音。我想做的是告诉 Newtonsoft.Json,当它看到一种类型时PostalCode,它可以将它序列化为一个字符串值(反之亦然)。这将导致以下json:

{
  "Line1": "Line1",
  "Line2": "Line2",
  "Line3": "Line3",
  "Town": "Town", …
Run Code Online (Sandbox Code Playgroud)

c# serialization json.net

6
推荐指数
1
解决办法
1152
查看次数

标签 统计

c# ×1

json.net ×1

serialization ×1