这个问题在这里已有答案:
我正在使用反射和通用对象(T)创建一个映射两个不同对象(具有相同属性和类型)的函数。我的函数适用于具有简单属性(如int或string类型)的对象,但现在我必须添加对对象属性或列表的支持。我可以递归地执行此操作还是不可行?我出于工作原因无法发布代码。活动代码如下:
public static T MapObjects<T>(object sourceObject) where T : new()
{
T destObject = new T();
Type sourceType = sourceObject.GetType();
Type targetType = destObject.GetType();
foreach (PropertyInfo p in sourceType.GetProperties())
{
PropertyInfo targetObj = targetType.GetProperty(p.Name);
if (targetObj == null)
continue;
targetObj.SetValue(destObject, p.GetValue(sourceObject, null), null);
}
return destObject;
}
当属性是对象时,我可以修改此函数来调用自身吗?
您可以查看Protobuf.net(可以作为Nuget包安装)。它基于Google协议缓冲区,可以很容易地序列化和反序列化对象或复制对象。