我正在使用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序列化。