Разрешение значений связанного объекта - PullRequest
0 голосов
/ 08 мая 2018

У меня есть объект Person с такими атрибутами, как string name или int age и Profession profession. Профессия имеет такие атрибуты, как int id и string description.

Теперь я хочу извлечь все значения в строку. Строка должна выглядеть так:

Имя: Mr.X, Возраст: 24, Профессия: {Id: 1, Описание: IT специалист}

Но с моим кодом я получаю только

Имя: Mr.X, Возраст: 24 года, Профессия: Models.Profession

Мой код:

foreach (PropertyInfo pi in myObject.GetType().GetProperties())
{
    values += pi.Name + ": " + pi.GetValue(myObject) + ", ";
}

Что я делаю не так? Пожалуйста, помогите.

Заранее спасибо:)

1 Ответ

0 голосов
/ 08 мая 2018

Примерно так может работать:

class Profession
{
    ...

    public override string ToString()
    {
        //return string.Format("{{Id: {0}, Description: {1}}}", Id, Description);
        string values = string.Empty;
        foreach (System.Reflection.PropertyInfo pi in myObject.GetType().GetProperties())
            values += pi.Name + ": " + pi.GetValue(myObject) + ", ";
        return values.Substring(0, Math.Max(0, values.Length - 2));
    }
}

edit: Если вы не хотите переопределять метод ToString (), что-то вроде этого будет лучше:

public class Person : AbstractClass
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Profession Profession { get; set; }
}

public class Profession : AbstractClass
{
    public int Id { get; set; }
    public string Description { get; set; }
}

public abstract class AbstractClass
{
    public string GetString()
    {
        string values = string.Empty;
        foreach (System.Reflection.PropertyInfo pi in GetType().GetProperties())
        {
            if (pi.PropertyType.IsSubclassOf(typeof(AbstractClass)))
                values += pi.Name + ": {" + (pi.GetValue(this) as AbstractClass).GetString() + "}, ";
            else
                values += pi.Name + ": " + pi.GetValue(this) + ", ";
        }
        return values.Substring(0, Math.Max(0, values.Length - 2));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...