获取嵌套在 Wrapper class C# 中的所有字符串属性
Get ALL string properties nested within Wrapper class C#
我一直在用头撞墙试图找出如何动态遍历 object 层次结构以查找 parent class 下的所有字符串属性并执行替换那些字符串。
假设我有一个具有某些属性的 parent "wrapper" class。像这样
public class ParentWrapper
{
public Person Mom { get; set; }
public Person Dad { get; set; }
public IEnumerable<Person> Children { get; set; }
public Person FavoritePerson { get; set; }
public string FamilyName { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我希望能够动态地使用反射来查找 ParentWrapper 或任何其他 object 内的所有字符串属性。我想找到 parent class 中的字符串 属性 "FamilyName",但我还想找到嵌套 class 中的所有字符串值es。我想找到每个人的 FirstName 和 LastName 的所有字符串,以及嵌套在 child classes 中的 objects 内的任何字符串。
.GetType().GetProperties().Where(prop => prop.PropertyType == typeof(string))
这将使我获得 ParentWrapper class 中的所有字符串属性,但我希望能够动态向下钻取到所有不同级别。
希望我的请求有意义。
我现在无法检查它,但我认为你可以在这里做一些递归的事情,比如:
private static void ReadPropertiesRecursive(Type type)
{
foreach (PropertyInfo property in type.GetProperties())
{
if (property.PropertyType == typeof(string))
{
var FamilyName = property.GetValue(property))// something like this
//do what u want with searched values
}
if (property.PropertyType.IsClass)
{
ReadPropertiesRecursive(property.PropertyType);
}
}
}
我一直在用头撞墙试图找出如何动态遍历 object 层次结构以查找 parent class 下的所有字符串属性并执行替换那些字符串。
假设我有一个具有某些属性的 parent "wrapper" class。像这样
public class ParentWrapper
{
public Person Mom { get; set; }
public Person Dad { get; set; }
public IEnumerable<Person> Children { get; set; }
public Person FavoritePerson { get; set; }
public string FamilyName { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我希望能够动态地使用反射来查找 ParentWrapper 或任何其他 object 内的所有字符串属性。我想找到 parent class 中的字符串 属性 "FamilyName",但我还想找到嵌套 class 中的所有字符串值es。我想找到每个人的 FirstName 和 LastName 的所有字符串,以及嵌套在 child classes 中的 objects 内的任何字符串。
.GetType().GetProperties().Where(prop => prop.PropertyType == typeof(string))
这将使我获得 ParentWrapper class 中的所有字符串属性,但我希望能够动态向下钻取到所有不同级别。
希望我的请求有意义。
我现在无法检查它,但我认为你可以在这里做一些递归的事情,比如:
private static void ReadPropertiesRecursive(Type type)
{
foreach (PropertyInfo property in type.GetProperties())
{
if (property.PropertyType == typeof(string))
{
var FamilyName = property.GetValue(property))// something like this
//do what u want with searched values
}
if (property.PropertyType.IsClass)
{
ReadPropertiesRecursive(property.PropertyType);
}
}
}