Crea un object c # fortemente tipizzato dall’object json con ID come nome

Sto cercando di utilizzare l’API per un noto fornitore di meeting online. Una delle loro chiamate API restituisce un object simile a questo.

{ "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} } } 

Sto cercando di creare un object fortemente scritto in C # in modo da poter gestire questi dati. Posso creare oggetti per il sondaggio e il bit Survey e il bit di presenza ma non so come gestire il numero di identificazione, in questo caso 5234592 e 5235291, che è l’identificatore per la sessione.

 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 Stats { get; set; } } 

Sono abbastanza sicuro che il WebinarPerformanceStats è il problema, ma non so da dove andare. Cosa dovrei cambiare per ottenere

NewtonSoft.Json.JsonConvert.DeserializeObject(theJsonResponse)

lavorare?

Rendi il tuo object radice un dizionario:

 var dictionary = JsonConvert.DeserializeObject>(theJsonResponse); 

Json.NET serializza un dizionario da e verso un object JSON, con le chiavi convertite nei nomi delle proprietà. Nel tuo caso, i numeri ID saranno deserializzati come chiavi del dizionario. Se sei sicuro che saranno sempre numeri, potresti dichiararli come tali:

 var dictionary = JsonConvert.DeserializeObject>(theJsonResponse); 

Vedi Serializzare un dizionario e deserializzare un dizionario