好吧,我是使用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的一些变体,但我不记得在我尝试过的所有代码中我尝试过的内容。