Convert Object to NameValueCollection
I need to convert a generic object to a NameValueCollection. I am trying to use reflection. Although I can get the parent properties, I cannot get the properties of the parent property that is an object.
Class One
public string name{get;set}
Class Two
public string desc{get;set}
public One OneName{get;set;}
public static NameValueCollection GetPropertyName(
string objType, object objectItem)
{
Type type = Type.GetType(objType);
PropertyInfo[] propertyInfos = type.GetProperties();
NameValueCollection propNames = new NameValueCollection();
foreach (PropertyInfo propertyInfo in objectItem.GetType().GetProperties())
{
if (propertyInfo.CanRead)
{
var pName = propertyInfo.Name;
var pValue = propertyInfo.GetValue(objectItem, null);
if (pValue != null)
{
propNames.Add(pName, pValue.ToString());
}
}
}
return propNames;
}
I'm guessing there should be somesort recursive call, but can't figure out how to do it. Any help is appreciated.
source to share
I assume you want the result to NameValueCollection
contain properties both from Class One
and Class Two
when the input is of type Class Two
.
Now that we've set this up, you can check the type of each property. If one of the built-in types ( Type.IsPrimitive()
can help you figure it out), you can add the property to the final right away.Otherwise NameValueCollection
, you have to go through each property of that non-primitive type and repeat the process for it again. As you mentioned, here's the place for recursion.
source to share