我想要做的是使用 cosmos .net Sdk 版本 3 调用具有特定 Json 序列化配置的 SP。
使用版本 2,我可以在调用中设置 RequestOptions JsonSerializerSettings 属性。
现在有了版本 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) 反序列化你想要的任何东西。
如果你想序列化输入,还有另一种方法:
public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
string storedProcedureId,
Stream streamPayload,
PartitionKey partitionKey,
StoredProcedureRequestOptions requestOptions = null,
CancellationToken cancellationToken = default(CancellationToken));
哪里streamPayload是Stream. 示例用法: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));