C# 如何将子级对象从一个类分配到另一个类?

C# 如何将子级对象从一个类分配到另一个类?,c#,.net,C#,.net,我有一个如下所示的类,其中我尝试将属性值从AClass分配给BClass: public class AClass { public string Name { get; set; } public int NameID { get; set; } public int Age { get; set; } public String DateOfBirth { get; set; } public Lis

我有一个如下所示的类,其中我尝试将属性值从AClass分配给BClass:

public class AClass
    {
        public string Name { get; set; }
        public int NameID { get; set; }
        public int Age  { get; set; }
        public String DateOfBirth  { get; set; }
        public List<AClassAddress> Addresses { get; set; }
    }

    public class AClassAddress
    {
        public string Street;
        public string City;
        public string State;
        public string Country;
    }

    public class BClass
    {
        public int NameID { get; set; }
        public int Age { get; set; }
        public List<BClassAddress> Addresses { get; set; }
    }

    public class BClassAddress
    {
        public string Street;
        public string City;
        public string State;
        public string Country;
    }
公共类AClass
{
公共字符串名称{get;set;}
公共int NameID{get;set;}
公共整数{get;set;}
公共字符串DateOfBirth{get;set;}
公共列表地址{get;set;}
}
公共类AClassAddress
{
公众街;;
公共字符串城市;
公共字符串状态;
公共字符串国家;
}
公共类B类
{
公共int NameID{get;set;}
公共整数{get;set;}
公共列表地址{get;set;}
}
公共类BClassAddress
{
公众街;;
公共字符串城市;
公共字符串状态;
公共字符串国家;
}
到目前为止,我在下面有一个代码来分配属性。在根级别,它工作正常,所有属性都从源分配到目标,但当涉及到地址时,即包含此AClass和BClass的集合,它不会被填充。有没有办法有效地实现这一目标

AClass source = new AClass();

// Getting some test data from JSON
source = JsonConvert.DeserializeObject<AClass>(strJSonString); 


BClass dest = new BClass();

Type typeDest = dest.GetType();
Type typeSrc = source.GetType();

var results = 
      from srcProp in typeSrc.GetProperties()
      let targetProperty = typeDest.GetProperty(srcProp.Name)
      where srcProp.CanRead
            && targetProperty != null
         // && (targetProperty.GetSetMethod(true) != null 
               // && !targetProperty.GetSetMethod(true).IsPrivate)
            && (targetProperty.GetSetMethod().Attributes & MethodAttributes.Static) == 0
            && targetProperty.PropertyType.IsAssignableFrom(srcProp.PropertyType)
      select new { sourceProperty = srcProp, targetProperty = targetProperty };

foreach (var props in results)
{
    props.targetProperty.SetValue(dest, props.sourceProperty.GetValue(source, null), null);
}
AClass source=new AClass();
//从JSON获取一些测试数据
source=JsonConvert.DeserializeObject(strJSonString);
b类dest=新的b类();
Type typeDest=dest.GetType();
类型typeSrc=source.GetType();
风险值结果=
从typeSrc.GetProperties()中的srcProp
让targetProperty=typeDest.GetProperty(srcProp.Name)
srcProp.CanRead在哪里
&&targetProperty!=无效的
//&&(targetProperty.GetSetMethod(true)!=null
//&&!targetProperty.GetSetMethod(true.IsPrivate)
&&(targetProperty.GetSetMethod().Attributes和MethodAttributes.Static)=0
&&targetProperty.PropertyType.IsAssignableFrom(srcProp.PropertyType)
选择新{sourceProperty=srcProp,targetProperty=targetProperty};
foreach(结果中的var支柱)
{
props.targetProperty.SetValue(dest,props.sourceProperty.GetValue(source,null),null);
}

嗨!如果
AClassAddress
BClassAddress
相同,请尝试查看此处,您不能简单地重用该类吗?如果是这样,您可以添加一个复制对象的
Clone
方法。这可能需要更多的代码,但会比任何动态或自动技术执行得更快。它可能不同,例如,在AClassAddress中,我可能有3个属性,而在B类中,我可能只有2个属性。您可以检查某个属性是否为IEnumerable,如果是,则通过它枚举,并递归地向我们提供与您相同的代码片段。