【发布时间】:2016-01-11 12:44:18
【问题描述】:
我有一个 XML 序列化程序,当返回的 XML 不是有效的 XML 时会中断。因此,为了解决这个问题,我想在返回的对象中显示错误,而不仅仅是 null 或 break。
我的一个类派生自一个包含名为message 的字符串错误属性的类,我希望设置此属性以便可以看到错误消息。
类结构可以是两个或三个类。使用泛型反射,我希望在解析 Class1 或 ClassA 时访问 ClassC 的字符串属性message。
是否可以访问 ClassC 的 Message 属性?目前,当我发送一个不直接从 ClassC 派生的对象时,它会引发异常,因为它找不到该属性(ClassA||1 中不存在该属性),但是由于并非每个类都是ClassA -> ClassB : ClassC,所以有些可能是Class1 -> Class2 -> Class3 : ClassC
问题代码: - 我只能看到解析到函数中的对象的属性,我需要能够遍历所有属性,如果它们还没有初始化,直到我找到名为message 的字符串属性,因此我可以设置它并返回一个包含有用错误信息的对象。
var obj = (T)Activator.CreateInstance(typeof(T));
Type type = obj.GetType();
PropertyInfo prop = type.GetProperty("message");
prop.SetValue(obj, Convert.ChangeType(dirtyXml,prop.PropertyType), null);
return (T)obj;
Desired - 用于设置 ClassC 中的 message 属性。目前我需要初始化其他属性(即类),例如 ClassB 或 Class2 和 Class3,然后才能访问消息属性。但是我不知道将哪个对象传递给函数。
两层类结构:
Class ClassA
{
public ClassB classB { get; set; }
}
Class ClassB : ClassC
{
// other properties
}
Class ClassC
{
public String message { get; set; }
{
【问题讨论】:
-
“它坏了”是什么意思?
-
@GaryMcGill - 这是一个未处理的异常,所以程序崩溃了,我希望将字符串错误放在类属性消息中,以便可以返回错误。
-
你说“当我发送一个不是从
ClassC派生的对象时,它会中断”,但大概你的意思是它确实从ClassC派生,但它这样做是间接? -
好点,是的,我的意思是它确实直接从 classC 派生,因此将发送 ClassA,但我需要访问 ClassC 属性 - 干杯,错过了,将更新 Q。
-
你得到了什么具体的异常,在哪一行?
标签: c# generics reflection