如何将嵌套对象模型添加到列表中

本文关键字:列表 添加 对象模型 嵌套 | 更新日期: 2023-09-27 18:32:00

我有一些这样的对象模型:

             var x= new XModel()
              {
                end_date = "2017-12-15",
                page = 1,
                start_date = "2014-12-01",
                group_by = new List<string> { "numbers" },
                filter = new Filter() { numbers= new List<int> {1620} ,names= null, deleted= null, added = null }
            };

或者这个:

  var y= new YModel
        {
            Title = "test title",     
            GenderType = Gender.Men,
            Oss = "ALL",
            Devices = new List<string> { "11", "12" },
            Categories = new List<string> { "11", "12" },
         }
我想将这些模型添加到列表中,

问题是,我尝试编写一个通用方法来将上述所有对象模型添加到列表中。我目前的方法是:

    internal static List<UrlParameter> GetParams<TModel>(this TModel entity)
    {
        var parameters = new List<UrlParameter>();
        foreach (var propertyInfo in entity.GetType().GetProperties())
        {
            var propVal = propertyInfo.GetValue(entity, null);
            if (propVal == null)
            {
                parameters.Add(new UrlParameter(propertyInfo.Name, ""));
                continue;
            }
            if (propertyInfo.PropertyType.IsGenericType)
            {
                if (propVal.GetType().IsPrimitiveType())
                {
                    parameters.Add(new UrlParameter(propertyInfo.Name, propVal));
                }
                else
                {
                    var arr = propVal as IEnumerable;
                    if (arr.HasArrayContainPrimitiveType())
                        parameters.Add(new UrlParameter(propertyInfo.Name, $"[{ToJsonArray(arr)}]"));
                    else
                        parameters.AddRange(from object obj in arr
                                            select GetParams(obj)
                            into subparams
                                            select new UrlParameter(propertyInfo.Name, subparams));
                }
            }
            else
            {
                if (propVal.GetType().IsPrimitiveType())
                    parameters.Add(new UrlParameter(propertyInfo.Name, propVal));
                else
                {
                    var subparams = GetParams(propVal);
                    parameters.Add(new UrlParameter(propertyInfo.Name, subparams));
                }
            }
        }
        return parameters;
    }

它适用于我的大多数模型,但是包含filterx使我成为问题,像这样保存的numbersfilter=numbers%3d%255b1620%255d%2c%2c%2c%2c%2c%2c%2c,其余字段消失了。我想添加numbers, names, deleted and added作为嵌套在过滤器中的键,值参数,你能帮我解决这个问题吗?

如何将嵌套对象模型添加到列表中

我通过使用MultipartFormDataContent类解决了我的问题。

它按原样转换所有嵌套模型。