我正在尝试为一个著名的在线会议提供者使用该API。他们的API调用之一返回一个看起来像这样的对象。
{ "5234592":{ "pollsAndSurveys":{ "questionsAsked":1, "surveyCount":0, "percentageSurveysCompleted":0, "percentagePollsCompleted":100, "pollCount":2}, "attendance":{ "averageAttendanceTimeSeconds":253, "averageInterestRating":0, "averageAttentiveness":0, "registrantCount":1, "percentageAttendance":100} }, "5235291":{ "pollsAndSurveys":{ "questionsAsked":2, "surveyCount":0, "percentageSurveysCompleted":0, "percentagePollsCompleted":0, "pollCount":0}, "attendance":{ "averageAttendanceTimeSeconds":83, "averageInterestRating":0, "averageAttentiveness":0, "registrantCount":1, "percentageAttendance":100} } }
我试图在C#中创建一个强类型对象,以便我可以处理这些数据。我可以为pollsAndSurveys位和出席者位创建对象,但是我不知道如何处理ID号,在这种情况下为5234592和5235291,即会话的标识符。
public class AttendanceStatistics { [JsonProperty(PropertyName = "registrantCount")] public int RegistrantCount { get; set; } [JsonProperty(PropertyName = "percentageAttendance")] public float PercentageAttendance{ get; set; } [JsonProperty(PropertyName = "averageInterestRating")] public float AverageInterestRating { get; set; } [JsonProperty(PropertyName = "averageAttentiveness")] public float AverageAttentiveness { get; set; } [JsonProperty(PropertyName = "averageAttendanceTimeSeconds")] public float AverageAttendanceTimeSeconds { get; set; } } public class PollsAndSurveysStatistics { [JsonProperty(PropertyName = "pollCount")] public int PollCount { get; set; } [JsonProperty(PropertyName = "surveyCount")] public float SurveyCount { get; set; } [JsonProperty(PropertyName = "questionsAsked")] public int QuestionsAsked { get; set; } [JsonProperty(PropertyName = "percentagePollsCompleted")] public float PercentagePollsCompleted { get; set; } [JsonProperty(PropertyName = "percentageSurveysCompleted")] public float PercentageSurveysCompleted { get; set; } } public class SessionPerformanceStats { [JsonProperty(PropertyName = "attendance")] public AttendanceStatistics Attendance { get; set; } [JsonProperty(PropertyName = "pollsAndSurveys")] public PollsAndSurveysStatistics PollsAndSurveys { get; set; } } public class WebinarPerformanceStats { public List<SessionPerformanceStats> Stats { get; set; } }
我很确定WebinarPerformanceStats是问题所在,但我不知道从这里出发。我要改变什么才能得到
NewtonSoft.Json.JsonConvert.DeserializeObject<WebinarPerformanceStats>(theJsonResponse)
上班?
使您的根对象成为字典:
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, SessionPerformanceStats>>(theJsonResponse);
Json.NET将字典与JSON对象之间的序列化,并将键转换为属性名称。在您的情况下,ID号将反序列化为字典键。如果您确定它们始终是数字,则可以这样声明它们:
var dictionary = JsonConvert.DeserializeObject<Dictionary<long, SessionPerformanceStats>>(theJsonResponse);
请参见序列化字典和反序列化字典