#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;}
автоматической защиты, и теперь код работает так, как ожидалось.