Azure Functions에 대한 CosmosDB 바인딩의 직렬화 제어
correctAnswer
및 incorrectAnswer
와 같은 필드 이름에 대해 낙타 대소문자를 사용하는 반면 F# 레코드 유형의 대소문자는 파스칼 대소문자( CorrectAnswer
및 IncorrectAnswer
)였습니다. 이것은 데이터의 직렬화/역직렬화에 문제를 일으켰습니다.input and output bindings for CosmosDB을 사용하고 있었기 때문에 데이터의 직렬화/역직렬화를 제어하지 않습니다. 그렇다면 이 문제를 해결하려면 어떻게 해야 합니까?
내부적으로 바인딩은 Newtonsoft.Json을 사용하고 여기에는 전역 구성을 설정할 수 있는 싱글톤이 있지만 문제가 있습니다. Functions 프로젝트에서 이를 어디에서 수행합니까? 우리는 함수의 시작을 제어하지 않습니다. 그렇다면 구성을 어떻게 설정합니까?
파기 후에
Microsoft.Azure.Functions.Extensions
클래스를 제공하는 FunctionsStartup
NuGet package ( source )을 발견했습니다. 이제 이것은 유망해 보입니다.이 클래스는 함수를 초기화할 때 실행될 메서드
public abstract void Configure(IFunctionsHostBuilder builder)
를 제공합니다. 이 클래스의 용도 중 하나는 IFunctionsHostBuilder
에 서비스를 추가하여 종속성 주입을 수행하는 것입니다. 그러나 우리의 경우에는 그렇게 할 필요가 없습니다. 대신 메서드를 사용하여 JSON 직렬화를 위한 자체 구성을 설정할 수 있습니다./역직렬화.다음은 F# 구현입니다.
module Startup
open Microsoft.Azure.Functions.Extensions.DependencyInjection
open Newtonsoft.Json
open Newtonsoft.Json.Serialization
open Newtonsoft.Json.Converters
type Startup() =
inherit FunctionsStartup()
override _.Configure(_: IFunctionsHostBuilder) : unit =
let settings = JsonSerializerSettings()
settings.ContractResolver <- CamelCasePropertyNamesContractResolver()
DiscriminatedUnionConverter() |> settings.Converters.Add
StringEnumConverter() |> settings.Converters.Add
JsonConvert.DefaultSettings <- (fun _ -> settings)
[<assembly: FunctionsStartup(typeof<Startup>)>]
do ()
Configure
메서드에서 JsonSerializerSessions
의 새 인스턴스를 만들고 기본 계약 확인자를 CamelCasePropertyNamesContractResolver
로 설정한 다음 이것을 다음으로 설정하기 전에 몇 가지 추가 변환기를 추가합니다(F# 유형을 더 잘 사용하기 위해). 기본 설정.함수 호스트가 이 클래스를 인식하도록 하려면 어셈블리 수준 특성
FunctionsStartup
(typeof
참조 포함)을 추가해야 하며 이제 CosmosDB에 대한 입력 및 출력 바인딩이 작동하는 방식을 제어합니다.다음에 Azure Functions에 전역 구성을 적용하려고 할 때 이 정보가 도움이 되기를 바랍니다.
Reference
이 문제에 관하여(Azure Functions에 대한 CosmosDB 바인딩의 직렬화 제어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/azure/controlling-serialisation-of-cosmosdb-bindings-for-azure-functions-4g7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)