[英]Deep Reflection in .NET
我需要创建钻取两三个对象属性的能力。 例如,类A具有对类B的属性引用,我需要访问类C.执行此操作的最佳方法是:直接反射,或者可能使用TypeDescriptor,还是其他什么?
谢谢。
写起来并不难。 我把几个类放在一起处理这个,所以我可以序列化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);
}
无论出于何种原因,我想写你自己的序列化代码,你将使用反射。
你所做的就是你编写了一个列举类型的递归方法。 然后,您可以根据需要应用此结果。
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
的实现必须识别内置类型并相应地处理它们,这是典型的事情,如字符串,char,整数,double,DateTime等。
最终结果是一个递归算法,遍历您的对象模型并在遇到我知道如何序列化的类型时写出值。
但是,我建议调查WCF,不是用于构建服务,而是用于序列化。 它作为.NET 3.0框架的一部分提供了一个新的程序集System.Runtime.Serilization,并且在处理序列化和数据注释时通常非常有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.