Преобразовать объект в NameValueCollection - PullRequest
3 голосов
/ 29 марта 2012

Мне нужно преобразовать общий объект (ы) в коллекцию NameValueCollection.Я пытаюсь использовать отражение.Хотя я могу получить родительские свойства, я не могу получить свойства родительского свойства, которое является объектом.

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

Я предполагаю, что должен быть какой-то рекурсивный вызов, но не могу понять, как это сделать.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 29 марта 2012

Я предполагаю, что вы хотите, чтобы NameValueCollection содержал свойства как Class One, так и Class Two, когда вход имеет тип Class Two.

Теперь, когда мы установили это, вы можете проверить тип каждого свойства.Если это один из встроенных типов (Type.IsPrimitive() может помочь вам определить это), вы можете сразу добавить свойство к результирующему NameValueCollection.В противном случае вам нужно просмотреть каждое свойство этого не примитивного типа и повторить процесс для него снова.Как вы упоминаете, здесь есть место для рекурсии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...