Получить все свойства со значениями в виде строки в c# - PullRequest
2 голосов
/ 15 апреля 2020

У меня есть объект obj, который содержит список параметров, где каждое свойство является объектом класса, который также содержит список свойств, другими словами, следующий пример

class obj
{
     public List<AAcls> AA { get; set; }
    public List<BBcls> BB { get; set; }
}
class AAcls
{
  public int AID {get;set;}
  public string AName {get;set;}
}
class BBcls
{
  public int BID {get;set;}
  public string BName {get;set;}
}

что я пытаюсь разобрать obj и заполнить класс CC следующим образом

class CC
{
   public string CCName{get;set;}
   public List<DD> keyval{get;set;}
}
class DD
{
   public string CCkey{get;set;}
   public string CCval{get;set;}
}

, так что окончательный результат будет

     CC myc = new CC();
     myc.groupname = "AA";
     myc.keyval=new List<DD>{ new DD { CCkey:"AID",CCval:"1" }};

    CC myc2 = new CC();
    myc2.groupname = "BB";
    myc2.keyval=new List<DD>{ new DD { CCkey:"BID",CCval:"2" }};

Я пытаюсь использовать отражение, чтобы сделать выше, но без удачи

 List<CC> L = new List<CC>();
        Type myType = obj.GetType();
        IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());

        foreach (PropertyInfo prop in props)
        {
            object propValue = prop.GetValue(obj, null);

            string groupname = prop.Name; // this will give me AA, but i am stuck to get the attributes of AA class (AID,AName)
        }

Любая помощь приветствуется.

1 Ответ

1 голос
/ 15 апреля 2020

Вам необходимо получить свойства и значения для каждого Obj свойства, например, следующий код:
1 - Инициализация

List<CC> L = new List<CC>();

obj objt = new obj
{
    AA = new List<AAcls> { new AAcls { AID = 1 } },
    BB = new List<BBcls> { new BBcls { BID = 2 } }
};

2 - Получить свойства для obj и l oop для каждого списка, получая свойства и значения для AA и BB:

foreach (PropertyInfo property in typeof(obj).GetProperties())
{
    CC cC = new CC { CCName = property.Name, keyval = new List<DD>() };
    //check if properties are collection
    if (!(property.GetValue(objt, null) is IList nestedArrayValues))
    {
        continue;
    }
    // for each value in in ``AA`` or ``BB``
    foreach (var nesteArrayValue in nestedArrayValues)
    {
        // get properties for AAcls or BBcls
        var nestedArrayProperties = nesteArrayValue.GetType().GetProperties();
        foreach (var propertyArray in nestedArrayProperties)
        {
            // get value of AID, BID, ...
            string value = propertyArray.GetValue(nesteArrayValue, null)?.ToString();

            if (value == null)
                continue;

            DD dD = new DD { CCkey = propertyArray.Name, CCval = value };

            cC.keyval.Add(dD);
        }
    }

    L.Add(cC);
}

3 - Демо

foreach (CC cc in L)
{
    Console.WriteLine(cc.CCName + ":");
    foreach (DD val in cc.keyval)
    {
        Console.WriteLine(val.CCkey + "," + val.CCval);
    }
}

4 - Результат

AA:
AID,1
BB:
BID,2

Я надеюсь, что это поможет вам.

...