Форматирование json с помощью JsonResult Type в MVC - PullRequest
2 голосов
/ 17 января 2020

Я пытаюсь создать бот Slack. Я должен ответить на Slack с помощью json, например так:

{
    "blocks": [
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "*It's 80 degrees right now.*"
            }
        },
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "Partly cloudy today and tomorrow"
            }
        }
    ]
}

Я использую функцию JsonResult. Мой код выглядит так:

public class Block
{
    public string type { get; set; }
    public Text text { get; set; }
}
public class Text
{
    public string type { get; set; }
    public string text { get; set; }
}

private List<Block> GetBlock()  
{  
    var block = new List<Block>  
    {  
        new Block
        {  
            type = "section",  
            text = new Text
            {
                type = "mrkdwn",
                text = "*It's 80 degrees right now.*"
            } 
        },  
        new Block
        {
            type = "section",
            text = new Text
            {
                type = "mrkdwn",
                text = "Partly cloudy today and tomorrow"
            }
        },  
    };  

    return block;  
}  

// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
    var blocks = GetBlock();
    return new JsonResult(blocks);
}

Мой вывод не выглядит так, как я хочу. Вот что я получаю:

[
    {"type":"section","text":{"type":"mrkdwn","text":"*It\u0027s 80 degrees right now.*"}},
    {"type":"section","text":{"type":"mrkdwn","text":"Partly cloudy today and tomorrow"}}
]

Похоже, у меня почти все в порядке, кроме этой строки "blocks": прямо перед всем остальным. Я очень смущен тем, как я могу включить эту часть.

Как включить часть "blocks":? Или есть более простой способ go об этом, который мне не хватает?

Спасибо!

1 Ответ

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

В показанном вами JSON "blocks" - это свойство объекта root. Таким образом, вы можете просто создать класс-оболочку, у которого есть свойство, соответствующее этому:

public class BlockWrapper
{
    public List<Block> blocks { get; set; }
}

, а затем использовать этот объект при создании сериализуемых данных:

private BlockWrapper GetBlock()
{
    var blockWrapper = new BlockWrapper
    {
        blocks = new List<Block>
        { ... }
    };
    return blockWrapper;
}
...