Получить значения свойств из сложной модели в С#

Я хочу получить значения свойств сложной модели (IList(Object) в объекте)). Я нахожу основные свойства родительского объекта, а также тип дочернего объекта, который мне нужен. Но я не могу извлечь его значения.

Я думаю, что проблема связана с параметром объекта в методе GetValue. Это должен быть объект TheMovieDatabaseModelDetails. Я пробовал здесь много разных вариантов, но получаю ошибку: "объект не соответствует целевому типу".

Модель:

public class TheMovieDatabaseModel
{
    public int page { get; set; }
    public int total_results { get; set; }
    public int total_pages { get; set; }
    public IList<TheMovieDatabaseModelDetails> results { get; set; }
}

Код:

private async Task GetMovieDetailsForTheMovieDatabase<T>(T movieModel)
        {
            PropertyInfo[] propertyInfo = movieModel.GetType().GetProperties();
            foreach (PropertyInfo property in propertyInfo)
            {
                if (property.Name.Equals("results"))
                {
                    var movieDetails = property.GetType().GetProperties();
                    foreach (var detail in movieDetails)
                    {
                        detail.GetValue(movieDetails, null); // here I need to fill in the right "object".
                    }
                }

                // etc..
            }
        }

исследование (среди прочего): Получить значения из сложного класса с помощью отражения


person Robin    schedule 07.04.2019    source источник


Ответы (1)


Я нашел ответ в:

объект C# в массив

Сначала мне нужно было создать IEnumerable, так как родительская модель создает IList ChildModel (фильмы, в которых есть сведения о фильме):

if (property.Name.Equals("results"))
                {
                    object movieObject = property.GetValue(movieModel);
                    IEnumerable movieObjectList = movieObject as IEnumerable;
                    if (movieObjectList != null)
                    {
                        foreach (object movie in movieObjectList)
                        {
                            PropertyInfo[] movieDetails = movie.GetType().GetProperties();
                            foreach (PropertyInfo detail in movieDetails)
                            {
                                detail.GetValue(movie, null);
                            }
                        }
                    }
                }
person Robin    schedule 07.04.2019
comment
Пожалуйста, отметьте свой ответ как принятый - person Alexander; 07.04.2019