SlackAPI - 具有动态 json 属性的负载反序列化

SlackAPI - payload deserialization with dynamic json properties

我在开发我的 SlackAPI 应用程序。

我已经创建了模态 window 并且当这个模态的表单被提交时 - 我收到一个 JSON 有效载荷,看起来像这样(不重要的 JSON 部分被删除)

{
   "type":"view_submission",
   "view":{
      "state":{
         "values":{
            "IGhn":{
               "e5+":{
                  "type":"static_select",
                  "selected_option":{
                     "text":{
                        "type":"plain_text",
                        "text":"2021\/8",
                        "emoji":true
                     },
                     "value":"2"
                  }
               }
            }
         }
      },

此有效载荷由我的端点正确处理 - 除了部分 - 状态 - 值为空值...

我有这样定义的模型:

public class View
{
...
[JsonProperty("state")]
public State State { get; set; }
...
}

public class State
{
[JsonProperty("values")]
public Dictionary<string, Values> Values { get; set; }
}

public class Values
{
[JsonProperty()] // <- This is the problem
public Dictionary<string, DynamicValue> something { get; set; }
}

public class DynamicValue
{
[JsonProperty("selectedOptions")] // <- This is null
public Dictionary<string, SelectedOption> SelectedOptions { get; set; }
}

如果值(属性 名称)是静态的,那没问题,但问题是:IGhn / e5+ 正在动态变化 - 所以反序列化不起作用...

必须说整个JSON反序列化正确,但我无法在IGhn下反序列化其余部分(我什至不知道如何为它创建class...反序列化器知道该怎么做....)

好的 - 我找到了解决方案:

我改变了 class 状态:

    public class State
        {
            [JsonProperty("values")]
            public Dictionary<string, Dictionary<string, ParentForSelectedOption>> Values { get; set; }
        }

然后 Object ParentForSelectedOption 以常规方式反序列化 - 所以这些动态名称是通过使用字典来解决的 这些可以删除:

public class Values
{
[JsonProperty()] // <- This is the problem
public Dictionary<string, DynamicValue> something { get; set; }
}

public class DynamicValue
{
[JsonProperty("selectedOptions")] // <- This is null
public Dictionary<string, SelectedOption> SelectedOptions { get; set; }
}