我有一个班级
public class ProjectTask
{
public ProjectTask();
[XmlElement("task_creator_id")]
public string task_creator_id { get; set; }
[XmlElement("task_owner_id")]
public string task_owner_id { get; set; }
[XmlElement("task_owner_location")]
public TaskOwnerLocation task_owner_location { get; set; }
[XmlElement("task_owner_type")]
public string task_owner_type { get; set; }
[XmlElement("task_type_description")]
public string task_type_description { get; set; }
[XmlElement("task_type_id")]
public string task_type_id { get; set; }
[XmlElement("task_type_name")]
public string task_type_name { get; set; }
}
xml将在运行时反序列化。
有没有办法获得字段名称和值?
使用反射我可以获得如下的属性名称:
PropertyInfo[] projectAttributes = typeof(ProjectTask).GetProperties();
可以应用foreach循环来获取属性
foreach(PropertyInfo taskName in projectAttributes)
{
Console.WriteLine(taskName.Name);
}
但是如何打印属性和值? 喜欢 task_creator_id = 1
其中task_Id是其中一个属性,运行时的值为1。
答案 0 :(得分:1)
使用taskName.GetValue(yourObject,null)
其中yourObject
应为ProjectTask
的实例。例如,
ProjectTask yourObject = (ProjectTask)xmlSerializer.Deserialize(stream)
var propDict = typeof(ProjectTask)
.GetProperties()
.ToDictionary(p => p.Name, p => p.GetValue(yourObject, null));
答案 1 :(得分:1)
您可以使用PropertyInfo
对象执行此操作:
var propertyName = MyPropertyInfoObject.Name;
var propertyValue = MyPropertyInfoObject.GetValue(myObject, null);
使用foreach循环可以访问所有类型的属性,也可以使用知道其名称的specefic属性,如下所示:
var MyPropertyInfoObject = myType.GetProperty("propertyName");