如何将嵌套对象模型添加到列表中
本文关键字:列表 添加 对象模型 嵌套 | 更新日期: 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;
}
它适用于我的大多数模型,但是包含filter
的x
使我成为问题,像这样保存的numbers
值filter=numbers%3d%255b1620%255d%2c%2c%2c%2c%2c%2c%2c
,其余字段消失了。我想添加numbers, names, deleted and added
作为嵌套在过滤器中的键,值参数,你能帮我解决这个问题吗?
我通过使用MultipartFormDataContent
类解决了我的问题。
它按原样转换所有嵌套模型。