gpt4 book ai didi

Azure Function Cosmos DB 输出绑定(bind) - 自定义 JsonSerializerSettings

转载 作者:行者123 更新时间:2023-12-01 23:35:20 25 4
gpt4 key购买 nike

我有一个带有 CosmosDB 输出绑定(bind)的 Azure 函数,如下所示:

public static class ComponentDesignHttpTrigger
{
[FunctionName("ComponentDesignInserter-Http-From-ComponentDesign")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "fromComponentDesign")] HttpRequest request,
[CosmosDB(
databaseName: StorageFramework.CosmosDb.DatabaseId,
collectionName: Storage.ComponentDesignCollectionId,
ConnectionStringSetting = "CosmosDBConnection")] out ComponentDesign componentDesignToInsert,
ILogger log)
{
var requestBody = new StreamReader(request.Body).ReadToEnd();
componentDesignToInsert = JsonConvert.DeserializeObject<ComponentDesign>(requestBody);

return new OkObjectResult(componentDesignToInsert);
}
}

在此函数中,componentDesignToInsert 会在函数执行完成后自动序列化并放入 CosmosDB 中。但默认的序列化不会将东西放在驼峰命名法中。为此,Json.NET 允许您提供自定义序列化器设置,如下所示:

var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};

var json = JsonConvert.SerializeObject(yourObject, settings);

但我不确定如何将其与我的输出绑定(bind)集成。我怎样才能做到这一点?

最佳答案

输出绑定(bind)此时不会公开序列化器设置。

您可以做的一件事是利用您自己的自定义 DocumentClient 进行操作。

但有一点很重要,DocumentClient 实例需要是静态的(有关 https://github.com/Azure/azure-functions-host/wiki/Managing-Connections 的更多详细信息)。

private static Lazy<DocumentClient> lazyClient = new Lazy<DocumentClient>(InitializeDocumentClient);
private static DocumentClient documentClient => lazyClient.Value;

private static DocumentClient InitializeDocumentClient()
{
// Perform any initialization here
var uri = new Uri("example");
var authKey = "authKey";

var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
return new DocumentClient(uri, authKey, settings);
}

[FunctionName("ComponentDesignInserter-Http-From-ComponentDesign")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "fromComponentDesign")] HttpRequest request,
ILogger log)
{
var requestBody = new StreamReader(request.Body).ReadToEnd();
var componentDesignToInsert = JsonConvert.DeserializeObject<ComponentDesign>(requestBody);

var collectionUri = UriFactory.GetDocumentCollectionUri(StorageFramework.CosmosDb.DatabaseId, Storage.ComponentDesignCollectionId);
await documentClient.UpsertDocumentAsync(collectionUri, componentDesignToInsert);
return new OkObjectResult(componentDesignToInsert);
}

如果适合您的场景,另一种选择是使用 JsonProperty 修饰类。

关于Azure Function Cosmos DB 输出绑定(bind) - 自定义 JsonSerializerSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55056533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com