【问题标题】:Get property values from complex model in C# [duplicate]从C#中的复杂模型中获取属性值[重复]
【发布时间】:2019-04-07 14:25:47
【问题描述】:

我想获取复杂模型的属性值(IList(Object) in 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

【问题讨论】:

    标签: asp.net-core complextype propertyinfo


    【解决方案1】:

    我找到了答案:

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

    【讨论】:

    • 请将您自己的答案标记为已接受
    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2014-02-07
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多