/// <summary> /// 转换数据为<see cref="UserExamQuestionSummary"/>类型数据 /// </summary> /// <param name="results"></param> /// <returns></returns> private IEnumerable <UserExamQuestionSummary> ConvertToQuestionSummary(IEnumerable <UserExamQuestionResult> results) { if (results == null) { yield break; } //题目ID集合 var questionIds = results.Select(p => p.QuestionId).ToArray(); //获取各题的正确答案 var rightAnswers = QuestionsAccessor.GetAnswersFor(questionIds); //循环处理数据类型,并添加上正确答案 foreach (var item in results) { //本题的正确答案(或参考答案) var answerJsonData = rightAnswers.ContainsKey(item.QuestionId) ? rightAnswers[item.QuestionId] : string.Empty; //反序列化出答案(或解析)内容 var deserContext = new AnswerDeserializeContext(item.Type); var answers = deserContext.Deserialize(answerJsonData); //过滤出正确的答案选项编号(或解析内容) var rightCodeArray = RightAnswersFilter(answers, item.Type); //题目摘要数据对象 var summary = new UserExamQuestionSummary(item); summary.RightAnswer = rightCodeArray != null?string.Join(",", rightCodeArray) : string.Empty; //将多个正确答案(或答案解析内容)用英文逗号分隔 yield return(summary); } }
/// <summary> /// 将题目答案项反序化为对应的数据对象 /// </summary> /// <param name="answers"></param> /// <param name="questionType"></param> /// <returns></returns> public static QuestionAnswer DeserializeAnswers(string answers, int questionType) { var context = new AnswerDeserializeContext(questionType); return(context.Deserialize(answers)); }