0

我有一个项目需要使用 CosmosDB Change Feed 监控多个 cosmosDB 中的多个集合。

ChangeFeedObserver 的签名非常明确,我不清楚如何传入 ComosDb.Document(json 格式)表示的对象类型。

public Task ProcessChangesAsync(IChangeFeedObserverContext context, IReadOnlyList<Document> deltas, CancellationToken cancellationToken)

因此,我有一系列观察者,只有一个词不同。传递给处理的类的名称。

DocumentObserverHelper.Processing<MyType>(context, deltas, cancellationToken);

使用该类型,我的助手能够反序列化和处理文档。虽然现在我有许多观察者课程。例如:MyType1Observer.cs、MyType2Observer.cs、MyType3Observer.cs、MyType4Observer.cs

所有类共享同一个基类,所以我一直在尝试使用类型绑定器对它们进行反序列化,但据我所知,这需要一个命名类型的属性。

            JsonSerializerSettings jsettings = new JsonSerializerSettings()
        {
            TypeNameHandling = TypeNameHandling.All,
            TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple,
            SerializationBinder = this.knownTypesBinder,
        };


BaseCosmosDBDocument baseCosmosDBDocument = (BaseCosmosDBDocument)JsonConvert.DeserializeObject(payload, jsettings);

这当然会导致无法将 JsonObject 反序列化为 BaseCosmosDbDocument(或其派生类)的异常

我正在寻找可以使用目标类类型实例化或能够确定目标类类型的单个观察者类

4

1 回答 1

0

无法弄清楚这一点,考虑一下,观察者jsons和那些jsons的adls处理之间只有一个隐含的合同。因此,我使用正则表达式将 Collection Name 从 ChangeFeed 上下文中隔离出来作为数据类型信号。然后使用该信号相应地路由文件以进行处理

            Regex rx = new Regex(@"\b(\w+$)");
        var observerCollection = rx.Match(context.FeedResponse.ContentLocation);
于 2019-06-27T17:07:47.323 回答