将嵌套对象列表转换为平面对象列表

时间:2018-02-15 03:36:03

标签: c# reflection

我有以下嵌套对象:

我想将此对象转换为flat对象,如下所示:

//just example of code for nested object
var someObj = new List<NestedClass1>
                {
                    new NestedClass1
                    {
                        prop1 = "",
                        prop2 = "",
                        prop3 = new List<NestedClass2>
                        {
                            new NestedClass2
                            {
                                prop4 = "",
                                prop5 = new List<NestedClass3>
                                {
                                    new NestedClass3
                                    {
                                        prop6 = "",
                                        prop7 = 0,
                                        prop8 = 0,                                        
                                    },
                                    new NestedClass3
                                    {
                                        prop6 = "",
                                        prop7 = 0,
                                        prop8 = 0,                                        
                                    },
                                }
                            },
                            new NestedClass2
                            {
                                prop4 = "",
                                prop5 = new List<NestedClass3>
                                {
                                    new NestedClass3
                                    {
                                        prop6 = "",
                                        prop7 = 0,
                                        prop8 = 0,                                        
                                    }
                                }
                            }
                        }
                    }
                };

结果对象:

var someResultObj = new List<FlatClass>{
    new FlatClass{
        prop1 = "",
        prop2 = "",
        prop4 = "",
        prop6 = "",
        prop7 = 0,
        prop8 = 0,
    }
}

你知道如何使用反射或其他方法吗?

我不想使用循环并从此循环和3d方库中初始化我的平面对象。

我想灵活地做,是否可以使用?

感谢。

1 个答案:

答案 0 :(得分:1)

这样的事情会起作用

var result = new List<CombinedClass>();

foreach (var item1 in someObj)      
   foreach (var item2 in item1.prop3)
      foreach (var item3 in item2.prop5)
         result.Add(
            new CombinedClass()
               {
                  prop1 = item1.prop1,
                  prop2 = item1.prop2,
                  prop4 = item2.prop4,
                  prop6 = item3.prop6,
                  prop7 = item3.prop7,
                  prop8 = item3.prop8,
               });

<强>鉴于

internal class CombinedClass
{
   public string prop6 { get; set; }

   public int prop7 { get; set; }

   public int prop8 { get; set; }

   public string prop4 { get; set; }

   public string prop1 { get; set; }

   public string prop2 { get; set; }

}