如何解决将具有元组和枚举的Dictionary转换为JSON
在我的课堂上,我有一个如下的枚举定义:
public enum ChangeType {
[EnumMember(Value ="Added")]
Added,[EnumMember(Value = "Removed")]
Removed,[EnumMember(Value = "Updated")]
Updated
}
在类定义中,我有一个属性:
public
Dictionary<string,(ChangeType changType,string oldValue,string newValue)>
PropertyChanges { get; set; }
要求:
- 转换为JSON时,changeType应该为文本,而不是数字
- 应使用项目名称而不是Item1,Item2和Item3来转换元组
我尝试过的事情:
- 至于枚举,我尝试将JsonConverter(typeof(StringEnumConverter))]放在属性前面(不行)
- 关于命名元组的任何建议
问题:
是否可以在不编写自定义转换器来转换整个类的情况下实现以上要求?
谢谢!
解决方法
{Tutorial} except for in some attributes在编译后基本上不存在ValueTuple键的名称,因此序列化程序获取的类型信息不包含名称。
因此,您必须使用一个类来控制序列化的名称,而不是该ValueTuple。
,实际上还没有我想的那么糟... JsonConvert.SerializeObject()已经很好地完成了Dictionary 的序列化工作,所以我要做的就是帮助Json解释枚举和元组。
首先,我创建一个名为 CustomTupleConverter 的类,该类实现 JsonConverter 。
在WriteJson()的实现中,我具有以下内容:
intellij
当调用 JsonConvert.SerializeObject()时,我只需将转换器的实例化添加到调用中即可:
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();
就是这样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。