将具有元组和枚举的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; }

要求:

  1. 转换为JSON时,changeType应该为文本,而不是数字
  2. 应使用项目名称而不是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();

就是这样。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...