mar*_*c_s 5 c# type-conversion
我仍在研究我的通用日志记录组件,它应该处理任何类型的object并将其转换("序列化"它)为字符串.
到目前为止工作得很好 - 除了一个要求:我应该能够识别给定对象的基本类型(如果存在),并且还单独列出该基本类型的属性.
基本上,我有一个像这样的方法:
public string LogObject(object myObject)
Run Code Online (Sandbox Code Playgroud)
现在我想检查一下这个对象的类型是否有一个基类,如果有的话 - 获取我的对象的属性,"downcast"到它的基类型.
检查基类型并不难:
Type baseType = myObject.GetType().BaseType;
Run Code Online (Sandbox Code Playgroud)
但是我如何myObject向baseType现在的类型对象转发?
我尝试了几件事,比如:
object baseObject = Convert.ChangeType(myObject, baseType);
Run Code Online (Sandbox Code Playgroud)
但是这需要我的对象类型来实现IConvertible我所有对象都无法满足的要求......
还有其他方法吗?
那些当然不起作用....
object baseObject = myObject as baseType;
object baseObject = (baseType)myObject;
Run Code Online (Sandbox Code Playgroud)
还有其他任何我想不到的方式吗?
更新:我已经考虑过这样做了
myObject变成allPropertiesmyObject类型上声明的属性declaredProperties(BindingFlag.Declared)baseProperties减去declaredProperties从allProperties 但这似乎有点过分反映 - 不确定这是否会表现得体面......
使用 BindingFlags.DeclaredOnly 获取仅在特定类型上声明的成员。此外,即使您不使用此标志,每个返回的 ProperyInfo 都有一个 DeclaredType 属性,其中列出了声明该属性的类型。
我能想到使用 DeclaredOnly 的唯一原因是如果您想要更好地控制结果集,例如过滤掉已在子类中重写的虚拟属性。
PS:使用像Fasterflect这样的库可以使这样的任务变得轻而易举;)