Два класса для запоминания разобранного:
class Answer
{
public int Index { get; set; }
public bool Correct { get; set; }
public string Desc { get; set; }
}
class Question
{
public int Id { get; set; }
public string Content { get; set; }
public string MainQuestion { get; set; }
public int MainQuestionContent { get; set; }
public List
Далее сам XML и его парсинг:
static void Main(string[] args)
{
string xml = @"
XElement elements = XElement.Parse(xml);
List
foreach (XElement question in elements.Element("questions").Elements("question"))
{
itemQuestion = new Question();
itemQuestion.Id = Convert.ToInt32(question.Attribute("id")?.Value);
itemQuestion.Content = question.Attribute("content")?.Value;
itemQuestion.MainQuestion = question.Element("main_question")?.Value;
itemQuestion.MainQuestionContent = Convert.ToInt32(question.Element("main_question")?.Attribute("content")?.Value);
var answers = from a in question.Elements("answer")
select new
{
AttributeIndex = a.Attribute("index")?.Value,
AttributeCorrect = a.Attribute("correct")?.Value,
Answer = a?.Value
};
if (answers.Any())
{
foreach (var item in answers)
{
itemAnswer = new Answer();
itemAnswer.Index = Convert.ToInt32(item.AttributeIndex);
itemAnswer.Correct = Convert.ToBoolean(item.AttributeCorrect);
itemAnswer.Desc = item.Answer;
itemQuestion.Answers.Add(itemAnswer);
}
}
questionsList.Add(itemQuestion);
}
}
Хотелось бы foreach (XElement question in elements.Element("questions").Elements("question"))
превратить в запрос LINQ, только я не могу сообразить как.
Благодаря подсказке @Grundy получилось оптимизировать так:
List
}).ToList()
}).ToList();
Ответ
По сути, код эквивалентен обычному select
Например такому:
List
Комментариев нет:
Отправить комментарий