微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

System.Json.Net-反序列化Task <T>失败无无参数构造函数 背景

如何解决System.Json.Net-反序列化Task <T>失败无无参数构造函数 背景

我遇到了无法使用System.Text.Json(.Net 5)将字符串反序列化为Task的问题。

JsonSerializer.Deserialize<Task<TItem>>(serializedItem)

背景

我有一个本地化的缓存,并将从数据库中检索到的项目存储在其中。

我无法将实际项目存储在缓存中,因为对象的任何后续操作都会导致对缓存项目进行操作,从而影响所有进一步的使用。因此,我存储了该对象的序列化副本。

关于性能...

我正在使用异步/等待模式来调用数据库(整个应用程序都是异步的)。

我阅读了一篇文章(可能是一段视频),其中Stephen Toub描述了缓存Task的性能优势。这样的SO文章When to cache Tasks?进行了详细介绍。无论如何,我以为我会尝试在本地缓存“层”中使用以下代码(无需序列化即可完美工作):

  1. 如果Task在我的缓存中,请等待它并返回结果。
  2. 否则,无需等待就调用DB方法并将结果任务添加到缓存中

当我添加序列化时,然后反序列化任务:

Task<TItem>? cachedItem = JsonSerializer.Deserialize<Task<TItem>>(serializedItem);

产生

在没有无参数构造函数的情况下对类型进行反序列化 单一参数化构造函数,或参数化构造函数 不支持带有'JsonConstructorAttribute'注释的

解决方法

答案很简单-序列化Task结果中的数据,而不是任务本身。

如果您不使用memcached之类的东西,而是使用简单的Dictionary进程内对象缓存之类的东西,那么序列化和反序列化似乎是克隆对象的一种繁重的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。