我试图将一个对象的所有字段值转换成数组。但问题是对象的字段可以有其他类型而不是字符串,但最终所有的值都应该是字符串。
比如说我们有一个红色的类
public class Apple
{
public string Name { get; set; }
public string ReleasedYear { get; set; }
public string SweetnessType { get; set; }
public string Color { get; set; }
public Stem StemType { get; set; }
}
public class Stem
{
public string name { get; set; }
public string supplier { get; set; }
}
var apple = new Apple()
{
Name = "hodor", ReleasedYear = "1999",
SweetnessType = "FruitLevel",
Color = "Green",
StemType = new Stem()
{
name = "stemar",
supplier = "apple"
}
};
// i want to get a result of ["hodor", "1999", "fruitLevel", "green", "stemar", "apple"]
如上所述,我想得到的结果是类“Apple”的所有属性的所有值。
我试过这个,它不起作用
private List<string> GetAllStringValuesFromObject(object model)
{
var result = new List<string>();
PropertyInfo[] properties = model.GetType().GetProperties();
foreach (PropertyInfo modelProp in properties)
{
if (modelProp.PropertyType.IsClass)
{
return GetAllStringValuesFromObject(modelProp);
}
if (modelProp.PropertyType == typeof(string))
{
result.Add(modelProp.GetValue(model).ToString());
}
}
return result;
}
有没有一种注重表现的方法来做到这一点?有人能帮忙吗谢谢
2条答案
按热度按时间5vf7fwbs1#
让我们创建一个扩展类来扩展对象类型。然后,我们可以在任何对象类中使用下面的扩展,例如苹果,香蕉和橙子。;)
l2osamch2#
好吧,这里有一个解决问题的方法:
在你最初的
GetAllStringValuesFromObject()
中,你有一个关键的错误。如果迭代的modelProp
是一个类,则传入PropertyInfo对象而不是属性的**Value。**此外,您将其设置为在该点返回,而不是添加到result
列表,因此它将不返回任何内容。希望这有助于澄清这个问题!