用反射映射复杂对象[重复]

问题描述 投票:-2回答:1

这个问题在这里已有答案:

我正在使用反射和通用对象(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;
    }

当属性是对象时,我可以修改此函数来调用自身吗?

c# .net reflection types
1个回答
0
投票

您可以查看Protobuf.net(可以作为Nuget包安装)。它基于Google协议缓冲区,可以很容易地序列化和反序列化对象或复制对象。

Protobuf-Net as copy constructor

https://www.c-sharpcorner.com/article/serialization-and-deserialization-ib-c-sharp-using-protobuf-dll/

Getting started with protobuf-net

© www.soinside.com 2019 - 2024. All rights reserved.