将强类型对象的所有属性复制到 DynamicObject
Copy all properties of strongly typed object into DynamicObject
有没有一种简单的方法可以将强类型对象中的所有内容复制到动态对象中?目标必须是由我正在使用的第 3 方库确定的 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 的所有成员。
有没有一种简单的方法可以将强类型对象中的所有内容复制到动态对象中?目标必须是由我正在使用的第 3 方库确定的 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 的所有成员。