使用反射读取包含另一个对象数组的对象的属性
如何使用 C# 中的反射读取包含数组类型元素的对象的属性。如果我有一个名为 GetMyProperties 的方法,并且确定该对象是自定义类型,那么如何读取数组的属性及其中的值。 IsCustomType 是确定类型是否为自定义类型的方法。
public void GetMyProperties(object obj)
{
foreach (PropertyInfo pinfo in obj.GetType().GetProperties())
{
if (!Helper.IsCustomType(pinfo.PropertyType))
{
string s = pinfo.GetValue(obj, null).ToString();
propArray.Add(s);
}
else
{
object o = pinfo.GetValue(obj, null);
GetMyProperties(o);
}
}
}
场景是,我有一个 ArrayClass 对象,ArrayClass 有两个属性:
-string Id
-DeptArray[] depts
DeptArray 是另一个有 2 个属性的类:
-string code
-string value
因此,这个方法获取 ArrayClass 的对象。我想从上到下读取所有属性并将名称/值对存储在字典/列表项中。我能够对值、自定义、枚举类型执行此操作。我被一系列对象困住了。不知道该怎么做。
How can I read the properties of an object that contains an element of array type using reflection in c#. If I have a method called GetMyProperties and I determine that the object is a custom type then how can I read the properties of an array and the values within. IsCustomType is method to determine if the type is custom type or not.
public void GetMyProperties(object obj)
{
foreach (PropertyInfo pinfo in obj.GetType().GetProperties())
{
if (!Helper.IsCustomType(pinfo.PropertyType))
{
string s = pinfo.GetValue(obj, null).ToString();
propArray.Add(s);
}
else
{
object o = pinfo.GetValue(obj, null);
GetMyProperties(o);
}
}
}
The scenario is, I have an object of ArrayClass and ArrayClass has two properties:
-string Id
-DeptArray[] depts
DeptArray is another class with 2 properties:
-string code
-string value
So, this methods gets an object of ArrayClass. I want to read all the properties to top-to-bottom and store name/value pair in a dictionary/list item. I am able to do it for value, custom, enum type. I got stuck with array of objects. Not sure how to do it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个代码:
我已经测试了这个代码,它通过反射正确解析数组。
Try this code:
I've tested this code and it resolves arrays through reflection correctly.
您需要检索属性值对象,然后对其调用 GetType()。然后你可以做这样的事情:
仅供参考——我从递归对象格式化方法中提取了这段代码(我现在将使用 JSON 序列化)。
You'll need to retrieve the property value object and then call GetType() on it. Then you can do something like this:
FYI -- I pulled this code from a recursive object formatting method (I would use JSON serialization for it now).