Можно ли использовать LINQ для разбора JSON? - C#
Формулировка задачи:
У меня есть библиотека для "парсинга" JSON страницы, стыренная с http://json2csharp.com/#. Она выдает классы - скелеты для основы которая у меня есть. Получилось что там естественно всё вложено друг в друга:
Кое-как сделал вывод инфы через foreach:
Это получилось не очень очевидно. Ииииии вот мой вопрос: можно ли использовать для этого безобразия LINQ?
Или как нибудь сразу присвоить то что нужно переменным.
public class Head
{
}
public class Syn //Массив синонимов
{
public string text { get; set; }
public string pos { get; set; }
public string asp { get; set; } //совершенный\несовершенный вид
public string gen { get; set; } //род
}
public class Mean //значения
{
public string text { get; set; }
}
public class Tr2
{
public string text { get; set; }
}
public class Ex
{
public string text { get; set; }
public List<Tr2> tr { get; set; }
}
public class Tr //Массив переводов.
{
public string text { get; set; }
public string pos { get; set; }
public List<Syn> syn { get; set; }
public List<Mean> mean { get; set; }
public string asp { get; set; }
public List<Ex> ex { get; set; }
public string gen { get; set; } //Род существительного для тех языков, где это актуально (может отсутствовать).
}
public class Def //Массив словарных статей. В атрибуте ts может указываться транскрипция искомого слова
{
public string text { get; set; }
public string pos { get; set; }
public List<Tr> tr { get; set; }
public string ts { get; set; }
}
public class RootObject
{
public Head head { get; set; }
public List<Def> def { get; set; }
} translateWord.Text = resp.def[0].text + " [" + resp.def[0].ts + "]\n";
foreach (var translate in resp.def[0].tr)
{
translateWord.SelectionFont = new Font(Control.DefaultFont, FontStyle.Bold);
translateWord.AppendText(translate.text + ", ");
// translateWord.Text += translate.text + ", ";
if (translate.syn != null)
foreach (var moreTr in translate.syn)
{
translateWord.Text += moreTr.text + ", ";
}
translateWord.Text += "\nСинонимы: ";
if (translate.mean != null)
foreach (var synonims in translate.mean)
{
translateWord.Text += synonims.text + ", ";
}
translateWord.Text += "\nПримеры: ";
if (translate.ex != null)
foreach (var exempls in translate.ex)
{
if (exempls.tr.Count == 1)
translateWord.Text += exempls.text + " - " + exempls.tr[0].text + ";\n";
else
translateWord.Text += "MORE\n";
}
}Решение задачи: «Можно ли использовать LINQ для разбора JSON?»
textual
Листинг программы
JObject parse = JObject.Parse(json); var defs = (JArray)parse["def"][0]["tr"][0]["syn"]; var result = defs.Select(x => x["text"]);