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

本文关键字:类型 动态 对象 | 更新日期: 2023-09-27 18:09:44

我在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-效率是相对的。很难回答。如果对你来说足够好,那么没问题

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;
}