1

2 つのパラメーターを持つ静的メソッドがあります。1 つはすべての情報を含むソース オブジェクトで、すべての値を転送する宛先オブジェクトです。

dest問題は、クラスにネストされたクラスがあり、それをオブジェクトに追加する方法がわからないことです。

私が得ることができるすべての助けに感謝します。

メソッドを呼び出すには、次のようにします。

Automapper(annonsDto, new Annons(){ 
            Model = new Model()
                 {Company = new Company()}, 
                         User = new Users()});

private static Object Automapper(Object source, Object dest)
    {
        PropertyInfo[] sourcePropertyInfos = source.GetType().GetProperties();
        Array.Sort(sourcePropertyInfos, delegate(PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
        {
            return propertyInfo1.Name.CompareTo(propertyInfo2.Name);
        });

        foreach (PropertyInfo sourcePropertyInfo in sourcePropertyInfos)
        {
            if (sourcePropertyInfo.PropertyType.IsClass)
            {
                if (sourcePropertyInfo.PropertyType.FullName.ToLower().Contains("xXxXx"))
                {
                    var nestedClass = sourcePropertyInfo.GetValue(source, null);
                    Automapper(nestedClass, dest);
                    continue;
                }
            }

            dest = TransferPropValue(sourcePropertyInfo.Name, source, dest);
        }

        return dest;
    }

    private static Object TransferPropValue(String targetName, Object sourceObj, Object destObj)
    {
        if (sourceObj == null)
        {
            return null;
        }

        Type destType = destObj.GetType();
        PropertyInfo destInfo = destType.GetProperty(targetName);

        Type sourceType = sourceObj.GetType();
        PropertyInfo sourceInfo = sourceType.GetProperty(targetName);
        if (sourceInfo == null) { return null; }

        try
        {
            var sourceValue = sourceInfo.GetValue(sourceObj, null);
            destInfo.SetValue(destObj, sourceValue, null);
        }
        catch (Exception) { }

        return destObj;
    }
4

0 に答える 0