【发布时间】:2011-08-08 20:44:47
【问题描述】:
我对此感到困惑。但这是我想要做的。这是类结构:
public class Order
{
public Int32 orderID { get; set; }
public Int32 CustomerID { get; set; }
public Int32 ProductID { get; set; }
public string OrderName { get; set; }
public Product ProductDetails { get; set; }
public Customer CustomerDetails { get; set; }
}
public class Product
{
public Int32 ProductID { get; set; }
public string Name { get; set; }
}
public class Customer
{
public Int32 CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
}
我正在构建一个通用方法,它采用 XML 内容并创建和加载传递类型的对象实例。我让产品和客户正常工作。但是当涉及到订单时,它会变得混乱。
public static T LoadObject<T>(string Contents) where T : new()
{
T obj = new T();
foreach (PropertyInfo property in typeof (T).GetProperties())
{
if (property.PropertyType.IsValueType || property.PropertyType.IsPrimitive)
{
object propValue = Convert.ChangeType(GetValue(property.PropertyType, Contents),
property.PropertyType);
property.SetValue(obj, propValue, null);
}
else
{
//Type typeArgument = property.PropertyType;
//Type genericClass = t
//object propValue = LoadObject<> (dr);
//property.SetValue(obj, propValue, null);
}
}
return obj;
}
如何递归调用,以便 Order 加载客户和产品?
【问题讨论】:
-
你不能使用 XmlSerializer 来完成这个吗?
-
这些类都相当小,所以我不太明白你为什么需要这样一个通用的解决方案(YAGNI 原则......)。我只是为它们中的每一个实现一些“FromXml”方法,并使其成为接口方法或其他东西。考虑到反射实际上非常缓慢 - 当您要处理数千个订单时,它会很明显。一遍又一遍地检索相同的
PropertyInfos 成本很高。 -
这只是我想出的一个例子来更好地解释这个问题。实际上,这些不是类。而且输入也不必是 XML。
标签: c# .net reflection generics