从C#中的复杂模型获取属性值

时间:2019-04-07 14:25:48

标签: asp.net-core complextype propertyinfo

我想获取复杂模型的属性值(对象中的IList(Object))。我找到了父对象的主要属性以及所需的子对象的类型。但是我无法提取其值。

我认为问题是由于GetValue方法中的obect参数引起的。它必须是“ 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..
            }
        }

研究(以及其他): Get Values From Complex Class Using Reflection

1 个答案:

答案 0 :(得分:0)

我在以下位置找到了答案

C# object to array

我首先需要创建一个IEnumerable,因为父模型创建了ChildModel的IList(具有电影细节的电影):

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);
                            }
                        }
                    }
                }