Slack API запрос сериализации - PullRequest
0 голосов
/ 11 июля 2019

Каким-то образом модель не десериализована, но если изменить класс SlackResponse на строку, то внутри будет необработанный json, так как он может иметь настройки из JSON.Net, что бы она обычно десериализовала?

Входные данные

payload = {\ "type \": \ "message_action \", \ "token \": \ "000 \", \ "action_ts \": \ "000 \", \ "team \"": {\" ID \ ": \" 000 \ "\ "домен \": \ "000 \"}, \ "Пользователь \": {\ "ID \": \ "", \" имя 000 \\ ": \" 000 \ "}, \" канал \ ": {\" идентификатор \ ": \" 000 \ "\ "имя \": \ "000 \"}, \ "callback_id \": \"\ 000 \ "\ "message_ts": \ "000 \", \ "сообщение \": {\ "bot_id \": \ "тип 000 \", \ ": rm_create \", \ "trigger_id \" \"\ ": \" сообщение \», \ "текст \": \ "000 \", \ "Пользователь \": \ "000 \", \ "ц \": \ "000 \", \ "команда \": \ "000 \"}, \ "response_url \": \ "000 \"}

В C # создан класс

public partial class SlackResponse
{
    [JsonProperty("type")]
    public string Type { get; set; }

    [JsonProperty("token")]
    public string Token { get; set; }

    [JsonProperty("action_ts")]
    public string ActionTs { get; set; }

    [JsonProperty("team")]
    public Team Team { get; set; }

    [JsonProperty("user")]
    public Channel User { get; set; }

    [JsonProperty("channel")]
    public Channel Channel { get; set; }

    [JsonProperty("callback_id")]
    public string CallbackId { get; set; }

    [JsonProperty("trigger_id")]
    public string TriggerId { get; set; }

    [JsonProperty("message_ts")]
    public string MessageTs { get; set; }

    [JsonProperty("message")]
    public Message Message { get; set; }

    [JsonProperty("response_url")]
    public Uri ResponseUrl { get; set; }
}

public partial class Channel
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

public partial class Message
{
    [JsonProperty("client_msg_id")]
    public Guid ClientMsgId { get; set; }

    [JsonProperty("type")]
    public string Type { get; set; }

    [JsonProperty("text")]
    public string Text { get; set; }

    [JsonProperty("user")]
    public string User { get; set; }

    [JsonProperty("ts")]
    public string Ts { get; set; }

    [JsonProperty("team")]
    public string Team { get; set; }
}

public partial class Team
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("domain")]
    public string Domain { get; set; }
}

и метод контроллера

[HttpPost]
public async void Get([FromForm(Name = "payload")] SlackResponse payload)
{
}

1 Ответ

1 голос
/ 11 июля 2019

Кажется, что в ядре asp.net FromForm не поддерживает сериализацию , самое простое решение - это

[HttpPost]
public async void Get([FromForm(Name ="payload")] string jsonString)
{
    var payload= JsonConvert.DeserializeObject<SlackResponse>(jsonString);
}
...