我需要创建钻取像两个或三个深度的对象属性的能力。例如,类A具有对类B的属性引用,我需要访问类C.执行此操作的最佳方式是:直接反射还是使用TypeDescriptor或其他类型?.NET中的深度反射
谢谢。
我需要创建钻取像两个或三个深度的对象属性的能力。例如,类A具有对类B的属性引用,我需要访问类C.执行此操作的最佳方式是:直接反射还是使用TypeDescriptor或其他类型?.NET中的深度反射
谢谢。
这不难写。我把几个类放在一起来处理这个问题,这样我就可以序列化WinForm的属性。看看这个课程和相关的课程。
http://csharptest.net/browse/src/Library/Reflection/PropertySerializer.cs
如果你知道在静态情况下的路径(即路径总是相同)和属性都可以访问(内部或公开),您可以使用动态
[Test]
public void Foo()
{
var a = new A
{
B = new B
{
C = new C
{
Name = "hello"
}
}
};
DoReflection(a);
}
private void DoReflection(dynamic value)
{
string message = value.B.C.Name;
Debug.WriteLine(message);
}
我你无论出于何种原因,都想写你自己的序列化代码,你将会使用反射。
你所做的是你写一个递归的方法来serlizating一个类型。然后,您可以按照您认为合适的方式应用此结果。
var type = myObjectOfSomeType.GetType();
// now depending on what you want to store
// I'll save all public properties
var properties = type.GetProperties(); // get all public properties
foreach(var p in properties)
{
var value = p.GetValue(myObjectOfSomeType, null);
Writevalue(p.Name, value);
}
的WriteValue
实施必须认识到内建类型,并相应地对待他们,这跟弦,字符,整数,双,日期时间等
最终结果是一种递归算法,它遍历对象模型并在遇到类型时写出值,我知道如何序列化。
不过,我建议考虑WCF,不为建设服务,但进行序列化。它作为.NET 3.0框架的一部分发布,并带有一个新的程序集System.Runtime.Serilization,通常在处理序列化和数据注释时非常有用。
是属性public? – Simon 2011-01-14 03:06:05
我们能获得更多细节吗?任何类型的用法或示例代码?我用Reflection完成了各种各样的事情,但我仍然不确定自己明白自己想做什么。 – jcolebrand 2011-01-14 03:06:23
@Simon是,它的公众。 @drachenstern我基本上正在尝试做@Simon在他的帖子中做的事情。 – 2011-01-14 12:52:57