将对象解析为动态提供的类型

时间:2015-08-24 12:00:09

标签: c# asp.net .net linq generics

我在C#中有以下泛型方法,它将ASP.NET Web窗体应用程序中的客户端数据解析为某种已定义的类型:

public static T ParseClientRequest <T> (object data) 
{
    var t = (System.Collections.Generic.Dictionary<string,object>) data;
    T obj = (T)Activator.CreateInstance(typeof(T));
    foreach(var pair in t) {
        FieldInfo field = obj.GetType().GetField(pair.Key);
        field.SetValue(obj, pair.Value);
    }
    return obj;
}

我有两个问题:

  1. 有没有使用循环的有效方法(使用LINQ或其他方法)?或者它足够有效吗?
  2. 如果类型字段之一的类型不是字符串,则代码抛出异常。如何将对象类型解析为动态提供的类型?

1 个答案:

答案 0 :(得分:2)

1-效率是相对的。很难回答。如果足够好给你,那么没问题

2-您可以使用Convert.ChangeType

修复代码
public static T ParseClientRequest<T>(object data)
{
    var t = (System.Collections.Generic.Dictionary<string, object>)data;
    T obj = (T)Activator.CreateInstance(typeof(T));
    foreach (var pair in t)
    {
        FieldInfo field = obj.GetType().GetField(pair.Key);
        field.SetValue(obj, Convert.ChangeType(pair.Value, field.FieldType)); //See this line
    }
    return obj;
}