通用DTO转换器-如何转换导航属性

时间:2019-07-02 20:23:25

标签: c# entity-framework unity-container dto

好吧,我是使用C#和编码的新手,并且我正在尝试制作用于转换为dto的通用方法(如果反向工作,仍然无法尝试),但是我遇到了导航属性转换的问题,或者具有嵌套对象的对象。我尝试了一些到处都是的代码,但是没有一个提议解决了我的问题。

据我所知,我的解决方案在很大程度上依赖于反射,因此我尝试做类似obj.GetType()。GetProperties()。GetType()。GetProperties()的操作,但失败了。

这是我的代码

public static T SimpleDTOConverter<T>(object obj) where T : new()
        {
            T dto = new T();
            foreach (var dtoProp in dto.GetType().GetProperties())
            {
                foreach (var objProp in obj.GetType().GetProperties())
                {
                    if (dtoProp.Name == objProp.Name)
                    {
                        object objValue = objProp.GetValue(obj);
                        dtoProp.SetValue(dto, objValue);
                    }
                }
            }
            return dto;
        }

当我调用SimpleDTOConverter(someObj)时,它可以很好地用于简单对象,但是会为嵌套对象引发异常。 试图嵌套try-catch块和catch块中的一部分以调用SimpleDTOConverter,但是我不能,因为我不知道T的类型,并且因为它是可变的,所以我不能将dtoProp作为类型传递... 我尝试过将返回的导航属性对象设置为null的一些变体,但我不记得在我尝试过的所有代码中我尝试过的内容。

0 个答案:

没有答案