asp.net-core - 带有列表的自定义 Json.Net 转换器
问题描述
在我的 ASP.Net Core API 项目中,我有一个使用动态值列表上的自定义转换器反序列化的类:
[JsonConverter(typeof(AddYearJsonConverter ))]
public List<dynamic> Value { get; set; }
如何在我的转换器中查看动态对象是否为 DateTimeOffset,如果是,则在反序列化之前将 Year 添加到值中?
public class AddYearJsonConverter : JsonConverter<DateTimeOffset?>
{
public override DateTimeOffset? ReadJson(JsonReader reader, Type objectType, DateTimeOffset? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
// ?? How to check type and add a year??
JObject obj = JObject.Load(reader);
return serializer.Deserialize<DateTimeOffset?>(reader);
}
解决方案
如果AddYearJsonConverter
要在Value字段中添加自定义,则应在AddYearJsonConverter的方法中返回相同类型的 Value 。ReadJson
然后通过 加载 reader JToken
,通过循环遍历 token 中的每个字段值,强制转换为DateTimeOffset
类型。如果成功,则相应日期增加一年,否则无需更改。
这是代码:
public class AddYearJsonConverter : JsonConverter<List<dynamic>>
{
public override List<dynamic> ReadJson(JsonReader reader, Type objectType, List<dynamic> existingValue, bool hasExistingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
List<dynamic> data = new List<dynamic>();
foreach (var Value in token)
{
try
{
DateTimeOffset dto = DateTimeOffset.Parse(Value.ToString()).AddYears(1);
data.Add(dto);
}
catch
{
data.Add(Value);
}
}
return data;
}
public override void WriteJson(JsonWriter writer, List<dynamic> value, JsonSerializer serializer)
{
}
}
推荐阅读
- git - Git 从另一个分支合并——3 种不同的方法——都可以正常工作吗?
- java - 控制器类中的@Autowired 服务 bean 无法识别方法
- python - 有没有办法在 pandas Dataframe 的另一列中的最后 n 行的基础上找到一行的值?
- python - 如何使用列表中的连接变量作为字符串参数
- c# - C# winform 中 Qt 小部件的使用
- android - Chromecast ExpandedControllerActivity 崩溃:尝试写入空对象引用上的字段 CastSeekBar
- entity-framework - EF Core 5.0 无法映射属性
- django - 为什么我禁止直接分配到多对多集合的前端。?
- c# - Razor 初始化 HttpContext.Current
- python - 迁移完成后,Django 2.2 无法序列化默认值