我仍在研究我的通用日志记录组件,它应该处理任何类型的 anobject
并将其转换(“序列化”它)为字符串。
到目前为止工作得很好 - 除了一个要求:我应该能够识别给定对象的基本类型(如果存在),并且还单独列出该基本类型的属性。
基本上,我有一个类似这样的方法:
public string LogObject(object myObject)
现在我想检查这个对象的类型是否有一个基类,如果有的话 - 获取我的对象的属性,“向下转换”到它的基类。
基本类型的检查并不难:
Type baseType = myObject.GetType().BaseType;
但是我现在如何向下转换myObject
为类型的对象baseType
?
我尝试了几件事,例如:
object baseObject = Convert.ChangeType(myObject, baseType);
但这需要我的对象类型来实现IConvertible
,我不可能从我的所有对象中要求...
还有什么办法吗?
那些当然是行不通的......
object baseObject = myObject as baseType;
object baseObject = (baseType)myObject;
还有其他我没有想到的方法吗?
更新:我已经考虑过这样做
- 获取
myObject
into的所有属性allProperties
myObject
将类型上声明的那些属性抓取到declaredProperties
(BindingFlag.Declared
)baseProperties
通过减去declaredProperties
from得到allProperties
但这在反思中似乎有点过分——不确定这是否会表现得体面....