c# - 使用接口和/或基类来处理属性将具有不同数据类型的对象
问题描述
我从 API 得到以下信息
{
"quiz_submission_events": [
{
"id": "3409",
"event_type": "question_answered",
"event_data" : {"answer": "42"}
"created_at": "2014-11-16T13:37:21Z"
},
{
"id": "3410",
"event_type": "question_flagged",
"event_data" : { "question_id": "1", "flagged": true }
"created_at": "2014-11-16T13:37:27Z"
}
]
}
我正在尝试创建对象来表示这些数据,然后可以在代码中使用。
我目前有这样的东西
public class PlatformQuizSubmissionEvents
{
public List<IPlatformQuizSubmissionEvent> QuizSubmissionEvents;
}
public interface IPlatformQuizSubmissionEvent
{
public int Id { get; set; }
public string EventType { get; set; }
public DateTime CreatedAt { get; set; }
public IQuestionEventData EventData { get; set; }
}
public class PlatformQuizSubmissionEventBase : IPlatformQuizSubmissionEvent
{
public int Id { get; set; }
public string EventType { get; set; }
public DateTime CreatedAt { get; set; }
public IQuestionEventData EventData { get; set; }
}
public class QuestionAnsweredEvent : PlatformQuizSubmissionEventBase
{
public new QuestionAnsweredEventData EventData { get; set; }
}
public interface IQuestionEventData { }
public class QuestionAnsweredEventData : IQuestionEventData
{
public string QuestionId { get; set; }
public string Answer { get; set; }
}
然后,例如,如果我只想返回“question_answered”事件,我有这样的事情
public List<QuestionAnsweredEvent> GetUserQuizSubmissionQuestionAnswerEvents(
string courseId, string quizId, int submissionId)
{
PlatformQuizSubmissionEvents submissionEvents =
_ApiRepository.GetUserQuizSubmissionEvents(courseId, quizId, submissionId);
List<QuestionAnsweredEvent> filtered = submissionEvents.QuizSubmissionEvents
.Where(qse => qse.EventType == "question_answered")
.ToList();
}
在这条线上
我收到这个错误
CS0029:无法将类型“System.Collections.Generic.List<QuizTime.Core.LTIPlatforms.Shared.IPlatformQuizSubmissionEvent>”隐式转换为“System.Collections.Generic.List<QuizTime.Core.LTIPlatforms.Shared.QuestionAnsweredEvent>”
所以,我知道我从这段代码中得到的将是作为 QuestionAnsweredEvent 对象列表的数据。但是,我不确定如何最好地表示这一点,以便 c# 编译器可以处理这个问题。我将尝试 Automapper,但我不确定这是否是解决此问题的正确方法:也许我只是错误地设置了我的接口/类?
解决方案
推荐阅读
- flutter - 无法在地图中添加多个数据
- c# - 试图得到所有方法的总和
- reactjs - 无法在 firebase 中按 uid 过滤用户。无法在 React Native 中隐藏组件
- django - 无法在 Django 中显示模态淡出的表单
- node.js - 无法使用 React dropzone 上传图片
- php - 如何分解两个数组并在每个循环中使用相同的数组
- python - 我有一个 python 代码和一个 json 文件,我无法将字符串更改为浮动
- python - 如何用函数交换全局变量
- angular - 如何在 p-calendar angular 中设置属性值?
- css - 如何在 Blogger 和评论框上实现暗模式