[英]Copy all properties of strongly typed object into DynamicObject
有没有简单的方法可以将所有内容从强类型对象复制到动态对象? 目标必须是由我使用的第三方库确定的DynamicObject
。 TypedModel
所有内容都需要在运行时放入MyDynamicObject
中。
public class MyDynamicObject : DynamicThirdPartyObject
{ }
public class TypedModel
{
public string text { get; set; }
public int number { get; set; }
public List<SomeOtherModel> someList { get; set; }
}
我在SO上发现的现有解决方案都可以在类型化类之间匹配属性。
编辑
找到了一个基于FastMember
的简单解决方案:
public void CopyProperties(object source, DynamicObject target)
{
var wrapped = ObjectAccessor.Create(target);
foreach (var prop in source.GetType().GetProperties())
{
wrapped[prop.Name] = prop.GetValue(source);
}
}
我建议使用反射。
假设您进行以下声明:
public class MyDynamicObject : DynamicThirdPartyObject
{ }
public class TypedModel
{
public string text { get; set; }
public int number { get; set; }
public List<SomeOtherModel> ListOtherModel { get; set; }
}
假设您要获取实例的属性:
typedModel.GetType().GetProperties();
另一种可能的情况是如果您要复制类型:
typeof(TypedModel).GetProperties();
TypedModel typeModel = new TypedModel {number = 1, text = "text1",
ListOhterModel = new List()
};
foreach(var prop in typeModel.GetType().GetProperties())
{
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(typeModel, null));
}
而且,如果需要遍历层次结构,也许需要使用递归,以便遍历嵌套类型,我的意思是可以使用反射来复制SomeOtherModel的所有成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.