Преобразование строки в JSON для запроса HTTP POST - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь вернуть файл json из запроса HTTP POST от Slack. Я использую netcoreapp3.1 вместе с Newtonsoft. Json NuGet. Прямо сейчас моя функция HTTP POST выглядит следующим образом.

    public async Task<ActionResult> SlashCommand([FromForm] SlackSlashCommand request)
    {
        var retVal = new JsonResult(GetBlock());

        return retVal;
    }

GetBlock () - это функция, которая возвращает класс, который я создал. Это работает в настоящее время, но каждый раз, когда я хочу изменить json, который он возвращает, я должен изменить этот класс. Мне бы очень хотелось иметь json в строковом формате, который я могу скопировать и вставить в свой код, а затем вернуться к Slack в формате json.

Есть ли способ сделать это? Я пытался использовать JsonConvert.DeserializeObject (str); но я использую это неправильно. Насколько я понимаю, эта функция принимает строку и преобразует ее в объект. Мне нужно взять строку и преобразовать ее в Microsoft.AspNetCore. Mvc .ActionResult json.

Любая помощь? Спасибо.

Ответы [ 2 ]

1 голос
/ 29 января 2020

Альтернативным вариантом является использование анонимного типа, который будет менее уязвим для того, чтобы стать недействительным JSON (простая опечатка в вашей строке JSON может сделать весь блок JSON нечитаемым):

var data = new
{
    blocks = new object[] {
            new {
                type = "section",
                text = new {
                    type = "plain_text",
                    text = "Hello!",
                    emoji = true
                }
            },
            new {
                type = "divider"
            },
            new {
                type = "actions",
                elements = new object[] {
                    new {
                        type = "button",
                        text = new {
                            type = "plain_text",
                            text = "Help"
                        },
                        value = "helpButton"
                    }
                }
            }
        }
};

return new JsonResult(data);

Производит:

{
    "blocks": [
        {
            "type": "section",
            "text":
            {
                "type": "plain_text",
                "text": "Hello!",
                "emoji": true
            }
        },
        {
            "type": "divider"
        },
        {
            "type": "actions",
            "elements": [
                {
                    "type": "button",
                    "text":
                    {
                        "type": "plain_text",
                        "text": "help"
                    },
                    "value": "helpButton"
                }
            ]
        }
    ]
}

Попробуйте онлайн

0 голосов
/ 29 января 2020

Я нашел ответ.

Это мой JSON в строковом формате:

string str = "{\"blocks\": [{\"type\": \"section\",\"text\": {\"type\": \"plain_text\",\"text\": \"Hello!\",\"emoji\": true}},{\"type\": \"divider\"},{\"type\": \"actions\",\"elements\": [{\"type\": \"button\",\"text\": {\"type\": \"plain_text\",\"text\": \"Help\"},\"value\": \"helpButton\"}]}]}";

И тогда это моя функция:

public async Task<ActionResult> SlashCommand([FromForm] SlackSlashCommand request)
{
    var retVal = new JsonResult(JsonConvert.DeserializeObject<object>(str));

    return retVal;
}

Это работает довольно хорошо. Извините, если я не дал слишком много информации.

...