here is a simple example to clear my intentions.
class A {
    public int Id
    public string Name
    public string Hash
    public C c
}
class B {
    public int id
    public string name
    public C c
}
class C {
    public string name
}
var a = new A() { Id = 123, Name = "something", Hash = "somehash" };
var b = new B();
I want to set b's properties from a. I have tried something but no luck.
public void GenericClassMatcher(object firstModel, object secondModel)
    {
        if (firstModel != null || secondModel != null)
        {
            var firstModelType = firstModel.GetType();
            var secondModelType = secondModel.GetType();
            // to view model
            foreach (PropertyInfo prop in firstModelType.GetProperties())
            {
                var firstModelPropName = prop.Name.ElementAt(0).ToString().ToLower(System.Globalization.CultureInfo.InvariantCulture) + prop.Name.Substring(1); // lowercase first letter
                if (prop.PropertyType.FullName.EndsWith("Model"))
                {
                    GenericClassMatcher(prop, secondModelType.GetProperty(firstModelPropName));
                }
                else
                {
                    var firstModelPropValue = prop.GetValue(firstModel, null);
                    var secondModelProp = secondModelType.GetProperty(firstModelPropName);
                    if (prop.PropertyType.Name == "Guid")
                    {
                        firstModelPropValue = firstModelPropValue.ToString();
                    }
                    secondModelProp.SetValue(secondModel, firstModelPropValue, null);
                }
            }
        }
    }
What shall I do?
 
    