Nei*_*ell 6 c# serialization json.net
有时,也许在 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",
"County": "County",
"PostalCode": "W1 AJX"
}
Run Code Online (Sandbox Code Playgroud)
这是可以实现的吗?我已经浏览了文档,我怀疑自定义JsonConverter
可能是前进的方向?
Tom*_*Tom -2
你能利用implicit operator
语法吗?
https://msdn.microsoft.com/en-us/library/z5z9kes2.aspx
public class PostalCode
{
public string Value { get; private set; }
public PostalCode(string value)
{
this.Value = value;
}
public static implicit operator string(PostalCode result)
{
return result.Value;
}
}
var postCode = new PostalCode("WN11 2PZ");
Console.Output(postCode); // "WN11 2PZ"
Run Code Online (Sandbox Code Playgroud)
我还没有测试过这个,所以我可能会偏离!
归档时间: |
|
查看次数: |
1152 次 |
最近记录: |