Как реализовать выпадающий список в модели водопада с использованием Microsoft bot framework

#c#

#c#

Вопрос:

Я пытаюсь реализовать выпадающий список в модели водопада с помощью диалога. Первым шагом является запрос пользователю ввести имя, затем попросите пользователя ввести возраст, а затем город, в котором пользователь должен путешествовать. И пользователь должен выбрать город из выпадающего списка, и я хочу переслать информацию на следующий шаг водопада. Мой код для выбора пункта назначения приведен ниже:

 private async Task<DialogTurnResult> DestinationStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var message = MessageFactory.Text("Enter your destination city");
            var bookingDetails = (BookingDetails)stepContext.Options;
            bookingDetails.age = (int)stepContext.Resu<
            var pmtOptions = new PromptOptions();
            if (bookingDetails.Destination == null)
            {
                var card = new AdaptiveCard();
                card.Body = new List<AdaptiveElement>();
                var choices = new List<AdaptiveChoice>()
             {
                 new AdaptiveChoice()
                 {
                     Title = "Pune",
                     Value = "Pune",
                 },
                 new AdaptiveChoice()
                 {
                     Title = "Mumbai",
                     Value = "Mumbai",
                 },
                 new AdaptiveChoice()
                 {
                     Title = "Hyderabad",
                     Value = "Hyderabad",
                 },
                 new AdaptiveChoice()
                 {
                     Title = "Bengaluru",
                     Value = "Bengaluru",
                 },
             };
                var choiceSet = new AdaptiveChoiceSetInput()
                {
                    IsMultiSelect = false,
                    Choices = choices,
                    Style = AdaptiveChoiceInputStyle.Compact,
                    Value = "1",
                    Id = "Destination city",
                };
                card.Body.Add(choiceSet);

                message.Attachments.Add(new Attachment() { Content = card, ContentType = "application/vnd.microsoft.card.adaptive" });
                var createTaskAndElement = new List<AdaptiveElement>
                {
                    new AdaptiveColumnSet
                    {
                        Id="btnCreate",
                        Columns=new List<AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Items=new List<AdaptiveElement>
                                {
                                    new AdaptiveActionSet
                                    {
                                        Actions=new List<AdaptiveAction>
                                        {
                                            new AdaptiveSubmitAction
                                            {
                                                Title="Select"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                };
                card.Body.Add(new AdaptiveContainer
                {
                    Id = "Create_Task_Container",
                    Style = AdaptiveContainerStyle.Default,
                    Spacing = AdaptiveSpacing.Default,
                    Bleed = false,
                    IsVisible = false,
                    VerticalContentAlignment = AdaptiveVerticalContentAlignment.Top,
                    Items = createTaskAndElement
                });
                card.Actions.Add(new AdaptiveSubmitAction() { Title = "Select" });
                return await stepContext.PromptAsync(DlgChoice, new PromptOptions { Prompt = message },cancellationToken);
            }
            return await stepContext.NextAsync(bookingDetails.Destination, cancellationToken);
        }
 

Когда я пытаюсь выполнить, я получаю сообщение об ошибке как:
Выдано исключение: ‘Newtonsoft.Json.JsonReaderException’ в системе.Частное.CoreLib.dll
‘dotnet.exe ‘ (CoreCLR: clrhost): Загружено’C:Program Файлы dotnet общиеMicrosoft.NETCore.App2.1.22System.Диагностика.StackTrace.dll «. Пропущены символы загрузки. Модуль оптимизирован, и включена опция отладчика «Только мой код».
‘dotnet.exe ‘ (CoreCLR: clrhost): Загружено’C:Program Файлы dotnet общиеMicrosoft.NETCore.App2.1.22System.Отражение.Metadata.dll «. Пропущены символы загрузки. Модуль оптимизирован, и включена опция отладчика «Только мой код».
‘dotnet.exe ‘ (CoreCLR: clrhost): Загружено’C:Program FilesdotnetsharedMicrosoft.NETCore.App2.1.22System.IO.MemoryMappedFiles.dll «. Пропущены символы загрузки. Модуль оптимизирован, и включена опция отладчика «Только мой код».
Майкрософт.AspNetCore.Mvc.Internal.ControllerActionInvoker:Информация: выполняется метод действия CoreBot4.Контроллеры.BotController.PostAsync (CoreBot4), возвращенный результат Microsoft.AspNetCore.Mvc.Emptyрезультат в 3158.1642мс.

Пожалуйста, помогите мне в решении проблемы. Заранее спасибо

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

1. Ошибка выдается в методе RunAsync: диалоговое окно ожидания. RunAsync(turnContext, ConversationState. CreateProperty<dialogState>(«dialogState»), CancellationToken);

2. @JohnG кажется, что внутри tunContext выполняет сериализацию. В диалоговом окне есть выпадающий список со списком городов, это не выдаст ошибку, если вы используете текстовое приглашение вместо выпадающего списка.