如何使用json反序列化二维数组

时间:2020-07-02 20:13:47

标签: c#

如何反序列化包含数组的JSON?

{"InlineKeyboard":[
    [{"Text":"sometext","Url":"someurl"},{"Text":"sometext","Url":"someurl"}],
    [{"Text":"sometext","Url":"someurl"},{"Text":"sometext","Url":"someurl","}]
]}

这是我创建的班级:

public class InlineKeyboard 
{
    [JsonProperty("InlineKeyboard")]
    public List<Keyboard> keyboards { get; set; }
}

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

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

这就是我尝试反序列化的方式:

var keyboard = JsonConvert.DeserializeObject<List<InlineKeyboard>>(replymarkup);

错误:

因为类型需要JSON数组(例如[1,2,3])才能正确反序列化。 要解决此错误,请将JSON更改为JSON数组(例如[1,2,3])

请注意,我所说的2d数组并不是真正的2d数组(如int[,]),而是List<...>的某些用法。

1 个答案:

答案 0 :(得分:1)

有问题的json无效(末尾有额外的,"),但是如果您进行了修复,则可以使用以下方法反序列化它:

public class InlineKeyboard
{
    [JsonProperty("InlineKeyboard")]
    public List<List<Keyboard>> keyboards { get; set; }
}
public class Keyboard
{
    [JsonProperty("Text")]
    public string Text { get; set; }
    [JsonProperty("Url")]
    public string Url { get; set; }
}

var keyboard = JsonConvert.DeserializeObject<InlineKeyboard>(replymarkup);

您的root json元素是一个对象,而不是数组,因此您应反序列化为一个对象(InlineKeyboard),而不是对象的List。但是InlineKeyboard是一个数组数组,因此您需要相应地更改InlineKeyboard.keyboards属性类型。