如何使用 .net Sdk 版本 3 通过自定义序列化调用 CosmosDb 上的存储过程?

How can I call an stored procedure on CosmosDb with custom serialization with .net Sdk version 3?

我想做的是使用 cosmos .net Sdk 版本 3 调用具有特定 Json 序列化配置的 SP。

对于版本 2,我可以在调用中设置 RequestOptions JsonSerializerSettings 属性。

现在对于版本 3,我没有那个选项,我唯一的选项是在客户端对象级别设置自定义配置。

这是唯一可用的选项吗? 我必须为我需要的每个配置创建一个新客户端吗?

提前致谢

您可以拨打ExecuteStoredProcedureStreamAsync。参考:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos/src/Resource/Scripts/Scripts.cs#L434

它的签名是:

public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
    string storedProcedureId,
    PartitionKey partitionKey,
    dynamic[] parameters,
    StoredProcedureRequestOptions requestOptions = null,
    CancellationToken cancellationToken = default(CancellationToken));

这意味着它会给你一个 ResponseMessage 返回,你可以根据需要反序列化 Content (Stream)。

如果要序列化Input,还有一个方法:

 public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
            string storedProcedureId,
            Stream streamPayload,
            PartitionKey partitionKey,
            StoredProcedureRequestOptions requestOptions = null,
            CancellationToken cancellationToken = default(CancellationToken));

其中 streamPayloadStream。示例用法:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/fad3daf789458bc73256d4b26bdd1e4cfc83b2ad/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/StoredProcedureTests.cs#L474

MemoryStream streamPayload = new MemoryStream(Encoding.UTF8.GetBytes(@"[""one"",""two"",""three""]"));

ResponseMessage response = await this.scripts.ExecuteStoredProcedureStreamAsync(
    storedProcedureId: sprocId,
    streamPayload: streamPayload,
    partitionKey: new Cosmos.PartitionKey(testPartitionId),
    requestOptions: null,
    cancellationToken: default(CancellationToken));