Десериализатор JSON не может создать и заполнить объект
Привет,
Я долго спорил с десериализацией определенного фрагмента json в объект, который развертывает интерфейс IEnumerable, чтобы я мог перебирать его список и использовать некоторые его атрибуты в качестве параметров в SQL-запросе.
Я уже получил несколько ответов, которые не решили проблему. Вы можете посмотреть их здесь:
c# - ошибка десериализации JSON в объект IEnumerable<T> - переполнение стека[^]
Я опубликую пример строки json, мои классы для обработки десериализации, ошибку, которую я получаю при попытке сделать это, и то, как новый объект будет использоваться, когда он будет правильно десериализован.
Что я уже пробовал:
//Json Example: { "ErrorCode":"" ,"ErrorMessage":"" ,"AppointmentReasonList":[ { "ClassCode":"851" ,"ClassDescription":"newpat" ,"Active":true ,"IsPatientRelated":true ,"ReasonCodeList":[ { "Code":"851" ,"Description":"Emergency New Patient Visit" ,"Duration":15 ,"Active":true } ,{ "Code":"BH NEW" ,"Description":"BH NEW" ,"Duration":15 ,"Active":true } ] } ,{ "ClassCode":"ANE" ,"ClassDescription":"Anesthesia" ,"Active":true ,"IsPatientRelated":true ,"ReasonCodeList":[ { "Code":"123456" ,"Description":"This is only a test" ,"Duration":15 ,"Active":true } ] } ] } //Classes to handle JSON structure public class AppointmentReasonResponse { public string ErrorCode { get; set; } public string ErrorMessage { get; set; } public AppointmentReasonList AppointmentReasonList { get; set; } } public class AppointmentReasonList : IEnumerable<AppointmentReason> { public List<AppointmentReason> AppointmentReasonLi { get; set; } IEnumerator<AppointmentReason> IEnumerable<AppointmentReason>.GetEnumerator() { foreach (AppointmentReason ApptReason in AppointmentReasonLi) { yield return ApptReason; } } public IEnumerator<AppointmentReason> GetEnumerator() { return AppointmentReasonLi.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } } public class AppointmentReason { public string ClassCode { get; set; } public string ClassDescription { get; set; } public bool Active { get; set; } public bool IsPatientRelated { get; set; } public ReasonCodeList ReasonCodeList { get; set; } } public class ReasonCodeList : IEnumerable<ReasonCode> { public List<ReasonCode> ReasonCodeLi { get; set; } IEnumerator<ReasonCode> IEnumerable<ReasonCode>.GetEnumerator() { // Return the array object's IEnumerator. foreach (ReasonCode Reason in ReasonCodeLi) { yield return Reason; } } public IEnumerator<ReasonCode> GetEnumerator() { // Return the array object's IEnumerator. return ReasonCodeLi.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { // call the generic version of the method return this.GetEnumerator(); } } public class ReasonCode { public string Code { get; set; } public string Description { get; set; } public int Duration { get; set; } public bool Active { get; set; } } //use of resulting object jarray = JsonConvert.DeserializeObject<AppointmentReasonResponse>(json); foreach (AppointmentReason ApptReason in jarray.AppointmentReasonList) { foreach (ReasonCode Reason in ApptReason) { AddInterfacePMReasonCode(PracticeID, Reason.Code, Reason.Description); } }
Вот ошибка, которую я получаю:
Цитата:{"Невозможно создать и заполнить список типа AppointmentReasonList. Путь "AppointmentReasonList", строка 1, позиция 59."}
Я был бы рад любой обратной связи, которую вы можете предоставить.