C# 如何将嵌套对象模型添加到列表中?
我有一些像这样的对象模型:C# 如何将嵌套对象模型添加到列表中?,c#,list,generics,C#,List,Generics,我有一些像这样的对象模型: var x= new XModel() { end_date = "2017-12-15", page = 1, start_date = "2014-12-01", group_by = new List<string> { "numbers" },
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 x=new XModel()
{
结束日期=“2017-12-15”,
第页=1,
开始日期=“2014-12-01”,
group_by=新列表{“编号”},
filter=newfilter(){numbers=newlist{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" },
}
var y=newymodel
{
Title=“测试标题”,
性别类型=性别。男性,
Oss=“所有”,
设备=新列表{“11”,“12”},
类别=新列表{“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;
}
内部静态列表GetParams(此TModel实体)
{
var参数=新列表();
foreach(entity.GetType().GetProperties()中的var propertyInfo)
{
var propVal=propertyInfo.GetValue(实体,空);
if(propVal==null)
{
parameters.Add(新的urlparmeter(propertyInfo.Name,”);
继续;
}
if(propertyInfo.PropertyType.IsGenericType)
{
if(propVal.GetType().IsPrimitiveType())
{
添加(新的urlparmeter(propertyInfo.Name,propVal));
}
其他的
{
var arr=作为IEnumerable的propVal;
if(arr.hasarayContainPrimitiveType())
Add(新的UrlParameter(propertyInfo.Name,$“[{ToJsonArray(arr)}]”);
其他的
parameters.AddRange(来自arr中的对象obj
选择GetParams(obj)
分为子参数
选择新的UrlParameter(propertyInfo.Name,子参数));
}
}
其他的
{
if(propVal.GetType().IsPrimitiveType())
添加(新的urlparmeter(propertyInfo.Name,propVal));
其他的
{
var子参数=GetParams(propVal);
添加(新的urlparmeter(propertyInfo.Name,子参数));
}
}
}
返回参数;
}
它适用于我的大多数型号,但是x
where containsfilter
使我遇到了问题,像这样保存的numbers
值filter=numbers%3d%255b1620%255d%2c%2c%2c%2c%2c%2c
,其余字段消失。
我想添加
数字、名称、删除和添加
作为键、值参数嵌套在筛选器中,您能帮我解决这个问题吗?我使用MultipartFormDataContent
类解决了我的问题
它转换所有嵌套模型的原样。我使用
MultipartFormDataContent
类解决了我的问题
它会按原样转换所有嵌套模型。您的筛选代码如何?我的筛选代码是:公共类筛选{public IEnumerable numbers{get;set;}公共IEnumerable names{get;set;}公共IEnumerable deleted{get;set;}公共IEnumerable added{get;set;}您必须使用Ienumerable的列表istead,Ienumerable不是不能是serialized@NawedNabiZada,正如您所说,我已将所有IEnumerables更改为List,但结果与以前一样。我试图看看是否可以调试您的程序,但我遇到了一些问题。首先,它是哪种类型的项目(WPF、MVC、WEB还是控制台)什么是UrlParameter?它是您创建的类还是从.DLL创建的类?您的筛选代码如何?我的筛选代码是:公共类筛选{public IEnumerable numbers{get;set;}public IEnumerable names{get;set;}public IEnumerable deleted{get;set;}public IEnumerable added{get;set;}您必须使用Ienumerable的列表istead,Ienumerable不是不能是serialized@NawedNabiZada,正如您所说,我已将所有IEnumerables更改为List,但结果与以前一样。我试图看看是否可以调试您的程序,但我遇到了一些问题。首先,它是哪种类型的项目(WPF、MVC、WEB还是控制台)什么是urlparmeter?它是您创建的类还是从.DLL创建的类?