如何解决System.Json.Net-反序列化Task <T>失败无无参数构造函数 背景
我遇到了无法使用System.Text.Json
(.Net 5)将字符串反序列化为Task的问题。
JsonSerializer.Deserialize<Task<TItem>>(serializedItem)
背景
我有一个本地化的缓存,并将从数据库中检索到的项目存储在其中。
我无法将实际项目存储在缓存中,因为对象的任何后续操作都会导致对缓存项目进行操作,从而影响所有进一步的使用。因此,我存储了该对象的序列化副本。
关于性能...
我正在使用异步/等待模式来调用数据库(整个应用程序都是异步的)。
我阅读了一篇文章(可能是一段视频),其中Stephen Toub描述了缓存Task的性能优势。这样的SO文章When to cache Tasks?进行了详细介绍。无论如何,我以为我会尝试在本地缓存“层”中使用以下代码(无需序列化即可完美工作):
当我添加序列化时,然后反序列化任务:
Task<TItem>? cachedItem = JsonSerializer.Deserialize<Task<TItem>>(serializedItem);
产生
在没有无参数构造函数的情况下对类型进行反序列化 单一参数化构造函数,或参数化构造函数 不支持带有'JsonConstructorAttribute'注释的
。
解决方法
答案很简单-序列化Task结果中的数据,而不是任务本身。
如果您不使用memcached之类的东西,而是使用简单的Dictionary
进程内对象缓存之类的东西,那么序列化和反序列化似乎是克隆对象的一种繁重的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。