Функции Azure .Net 5: Можно ли как-то реализовать привязку POCO?

#azure #azure-functions #.net-5 #c#-9.0

Вопрос:

При перемещении моих функций в .net5 я столкнулся с тем фактом, что привязка POCO, которая отлично работала с 3.1, по какой-то причине больше не применима к .net 5. Они говорят, что, возможно, в какой-то момент это будет реализовано, но по определенным причинам мне это нужно сейчас. Попытался найти какой-нибудь хитрый способ реализовать это, но потерпел неудачу. Лучшая мысль, которая у меня была, состояла в том, чтобы реализовать явный оператор в моем объекте DTO, который приведет HttpRequestData к его типу, но проблема в том, что HttpRequestData является абстрактным типом, и его конкретный тип реализации является внутренним. После этого я попытался привести входной параметр к HttpRequestData в промежуточном программном обеспечении с отражением, но параметры хранятся в IReadOnlyDictionary, который является неизменяемым. Так что теперь у меня закончились идеи. Может быть, кто-то нашел обходной путь для этого и может любезно поделиться, был бы очень признателен.

Комментарии:

1. Можете ли вы поделиться каким-нибудь минимальным кодом, в котором вы пытаетесь это сделать и терпите неудачу ?

Ответ №1:

Я полагаю, вы используете режим «изолированный от dotnet» (единственный способ запуска в .NET 5). Я также пытаюсь найти более элегантное решение для этого.

Тем временем я сам десериализовал данные внутри функции.

 var body = await new StreamReader(request.Body).ReadToEndAsync(); var myobject = JsonSerializer.Deserializelt;MyPocoClassgt;(json);  

Я бы действительно предпочел, чтобы среда выполнения делала это сама по себе, но я пока не могу найти способ. Я где-то читал, что можно создать наш собственный код привязки, но я его не пробовал.

Я заметил, что могу привязываться к отдельным свойствам полезной нагрузки json, но не к объекту…

Я надеюсь, что это появится в функциях Azure v4 .NET6, так как это не за горами.

Комментарии:

1. Верно, я делаю то же самое, но это некрасиво, и из-за этого мне пришлось изменить все сигнатуры функций. Моя идея состояла в том, чтобы создать какой-то базовый хак, чтобы не изменять определения функций, поэтому, когда эта функциональность будет доступна, я просто удалю ее, но не нашел способа реализовать это