[英]Converting Dictionary with tuple and enum to JSON
在我的 class 中,我的枚举定义如下:
public enum ChangeType {
[EnumMember(Value ="Added")]
Added,
[EnumMember(Value = "Removed")]
Removed,
[EnumMember(Value = "Updated")]
Updated
}
在 class 定义中,我有一个属性:
public
Dictionary<string, (ChangeType changType, string oldValue, string newValue)>
PropertyChanges { get; set; }
要求:
我试过的:
问题:
我可以在不编写自定义转换器来转换整个 class 的情况下实现上述目标吗?
谢谢!
ValueTuple 的键名在编译后基本不存在, 除了在某些属性中,所以序列化器获取的类型信息不包含名称。
因此,您必须使用 class 来控制序列化名称,而不是使用 ValueTuple。
它实际上并没有我想象的那么糟糕...... JsonConvert.SerializeObject() 已经在序列化 Dictionary<> 方面做得很好,所以我所要做的就是帮助 Json 解释枚举和元组。
首先,我创建了一个名为CustomTupleConverter的 class ,它实现了 JsonConverter<(ChangeType changeType, string oldValue, string newValue)> 。
在 WriteJson() 的实现中,我有以下内容:
writer.WriteStartObject();
writer.WritePropertyName("Action");
writer.WriteValue(value.changeType.ToString());
writer.WritePropertyName("OldValue");
writer.WriteValue(value.oldValue.ToString());
writer.WritePropertyName("NewValue");
writer.WriteValue(value.newValue.ToString());
writer.WriteEndObject();
调用JsonConvert.SerializeObject()时,我只需将转换器的实例化添加到调用中:
JsonConvert.SerializeObject(cc, Formatting.Indented, new CustomTupleConverter());
而已。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.