Я новичок в Json и пытаюсь понять, как я могу разобрать его с помощью Json.Net. Я пытался создать объекты для ввода json, но я застрял. Я не совсем уверен, как разбирать входные данные, чтобы я мог перебирать его и выводить номера сезона и название эпизода.
Любой, кто может указать мне в правильном направлении?
Json:
{
"data":{
"1921":{
"1":{
"airdate":"1921-03-20",
"name":"Cleaning Up!!?",
"quality":"N/A",
"status":"Wanted"
},
"2":{
"airdate":"1921-03-20",
"name":"Kansas City Girls Are Rolling Their Own Now",
"quality":"N/A",
"status":"Wanted"
},
"3":{
"airdate":"1921-03-20",
"name":"Did You Ever Take a Ride Over Kansas City Street 'in a Fliver'",
"quality":"N/A",
"status":"Wanted"
},
"4":{
"airdate":"1921-03-20",
"name":"Kansas City Spring Clean-Up",
"quality":"N/A",
"status":"Wanted"
}
},
"1923":{
"1":{
"airdate":"2013-05-16",
"name":"Alice Wonderland - aka - Alice in Slumberland",
"quality":"Unknown",
"status":"Downloaded"
}
}
},
"message":"",
"result":"success"
}
Код:
static void Main(string[] args)
{
RootObject data = JsonConvert.DeserializeObject<RootObject>(System.IO.File.ReadAllText(@"C:\Users\Benjamin\Desktop\json\input.txt"));
foreach (var e in data)
{
// Being able to output Season and Episode name like:
// 1921 - Cleaning Up!!?
}
}
public class RootObject
{
public Dictionary<int, Season> data { get; set; }
public string message { get; set; }
public string result { get; set; }
}
public class Season
{
public Dictionary<string, Episode> number { get; set; }
}
public class Episode
{
public string airdate { get; set; }
public string name { get; set; }
public string quality { get; set; }
public string status { get; set; }
}
С изменением вашего RootObject
:
public class RootObject
{
public Dictionary<int, Dictionary<string, Episode>> data { get; set; }
public string message { get; set; }
public string result { get; set; }
}
Затем вы можете сделать следующее:
RootObject root = JsonConvert.DeserializeObject<RootObject>(data);
foreach (var s in root.data)
{
foreach (var e in s.Value)
{
Console.WriteLine(string.Format("{0} - {1}", s.Key, e.Value.name));
// access whatever properties you want here...
}
}
Обратите внимание, что мы исключили объект Season
потому что JSON.net не сможет сопоставить number
свойства, потому что это не свойство в вашем оригинальном JSON (вы можете заставить его работать, но для этого потребуется некоторое возиться с пользовательской сериализацией),
Если вы действительно хотите решение LINQ, то что-то вроде:
root.data.ToList().ForEach(s =>
{
s.Value.ToList().ForEach(e =>
{
Console.WriteLine(string.Format("{0} - {1}", s.Key, e.Value.name));
});
});
Достигает того же, но требует копирования вашего словаря в список, который может быть проблемой, если ваш словарь очень большой.
data
после десериализации? Это заселено? В вашемRootObject
вас естьDictionary
под названиемdata
поэтому вам нужно будетdata.data
для начала.