【问题标题】:Copy all properties of strongly typed object into DynamicObject将强类型对象的所有属性复制到 DynamicObject
【发布时间】:2015-01-16 18:01:33
【问题描述】:

有没有一种简单的方法可以将强类型对象中的所有内容复制到动态对象中?目标必须是 DynamicObject,由我正在使用的第 3 方库确定。来自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);
    }
}

【问题讨论】:

标签: c# .net


【解决方案1】:

我建议使用反射。

假设你做出以下声明:

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 的所有成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多