CosmosDB 在移动到新程序集后无法反序列化对象



我正在使用CosmosDB来存储我的BotState和ConversationState。 现在我的代码库已经增长,我们已经开始重构,我们将一些对象移动到一个公共库中等等。

这样做之后,拨打电话

userData = await _botAccessors.BotStateAccessor.GetAsync(turnContext, () => new UserData(), cancellationToken);

失败,出现以下异常

Error resolving type specified in JSON '...'. Path '['BotAccessors.BotState'].ConversationContext.PreviousResponses.$values[0].channelData.$type'.

我查看了CosmosDB的文档,我看到了问题。

我尝试将 TypeNameHandling 和 TypeNameAssemblyFormatHandling

设置为
var requestOptions = new RequestOptions
{
JsonSerializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None, TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple }
};

创建 CosmosDbStorageOptions 时,但这不允许我解决问题。

不知道接下来要尝试什么。

这是 Azure Cosmos DocumentDB Client v2 中的一个错误,并且已经存在了一段时间。回顾这个问题,他们似乎并不打算在 v2 中修复它,而是选择在 v3 中修复它。不幸:

  • Bot Framework 不打算将CosmosDbStorage更新到 v3,因为CosmosDbPartitionedStorage在其位置发布。
  • 目前,CosmosDbPartitionedStorage与非分区数据库不兼容。目前正在讨论迁移计划和向后兼容性,但可能不会很快发布。

因此,您现在唯一的选择是基本上克隆CosmosDbStorage,将其称为NiteLordsCosmosDbStorage,并根据需要在ReadAsync()WriteAsync()方法中执行JSON序列化。

最新更新