将对象解析为动态提供的类型
本文关键字:类型 动态 对象 | 更新日期: 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;
}
我有两个问题:
- 是否有任何有效的方法(使用LINQ或其他)做它不使用循环?或者它是否足够高效?
- 如果一个类型的字段不是字符串类型,代码将抛出异常。如何将对象类型解析为动态提供的类型?
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;
}