松弛API请求序列化

时间:2019-07-11 02:28:33

标签: c# asp.net-web-api slack-api

不以某种方式对模型进行反序列化,但是如果将SlackResponse类更改为字符串,则内部将是原始json,因为它可能具有JSON.Net的设置,她通常会反序列化什么?

输入数据

  

payload = {\“ type \”:\“ message_action \”,\“令牌\”:\“ 000 \”,\“ action_ts \”:\“ 000 \”,\“ team \”:{\ “ id \”:\“ 000 \”,\“域\”:\“ 000 \”},\“用户\”:{\“ id \”:\“ 000 \”,\“名称\”:\ “ 000 \”},\“ channel \”:{\“ id \”:\“ 000 \”,\“名称\”:\“ 000 \”},\“ callback_id \”:\“ rm_create \”, \“ trigger_id \”:\“ 000 \”,\“ message_ts \”:\“ 000 \”,\“ message \”:{\“ bot_id \”:\“ 000 \”,\“ type \”:\ “消息\”,\“文本\”:\“ 000 \”,\“用户\”:\“ 000 \”,\“ ts \”:\“ 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 个答案:

答案 0 :(得分:1)

似乎在asp.net核心FromForm is not support serialization中,最简单的解决方案是

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