如何反序列化包含数组的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<...>
的某些用法。
答案 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
属性类型。