При попытке получить значение свойства с помощью отражения свойство равно нулю

#c# #.net-core

Вопрос:

Учитывая какой-то код, подобный этому:

 var deepPropertyName = "QuizSubmissionEvents"
T fullResult = JsonConvert.DeserializeObject<T>(content, JsonSnakeCaseNameStrategySettings.Settings());
var prop = fullResult.GetType().GetProperty(deepPropertyName);
var properties = fullResult.GetType().GetProperties();
var value = prop.GetValue(fullResult);
 

prop равно нулю, и я не могу понять, почему. На следующем снимке экрана показано, я полагаю, показывает, что fullResult действительно имеет QuizSubmissionEvents свойство:

снимок экрана с подробным описанием проблемы

Это класс, который представлен T здесь (PlatformQuizSubmissionEvents)

 public class PlatformQuizSubmissionEvents
    {
        public List<PlatformQuizSubmissionEvent> QuizSubmissionEvents;
    }

    public class PlatformQuizSubmissionEvent
    {
        public int Id { get; set; }

        public string EventType { get; set; }

        public DateTime ClientTimestamp { get; set; }

        [JsonConverter(typeof(CustomArrayConverter<EventData>))]
        public List<EventData> EventData { get; set; }
    }

    public class EventData
    {
        public string? QuizQuestionId { get; set; }

        public string? Answer { get; set; }
    }
 

Насколько я понимаю, я должен иметь возможность получить доступ к значению fullResult.QuizSubmissionEvents таким образом, но, опять же, GetProperty() возвращает значение null.

Вот упрощенная скрипка, которая воспроизводит ошибку: https://dotnetfiddle.net/r36pRG

Комментарии:

1. QuizSubmissionEvents в вашем коде, по-видимому, это общедоступное поле, а не общедоступное свойство. Можете ли вы увидеть это, если используете fullResult.GetType().GetField(deepPropertyName) ?

2. @pmcoltrane ты прав! Я изменил его, чтобы использовать функцию public List<PlatformQuizSubmissionEvent> QuizSubmissionEvents {get;set;} автоматической защиты, и теперь код работает так, как ожидалось.