2

我有一堂课

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。

4

2 回答 2

1

您可以使用您的PropertyInfo对象来做到这一点:

var propertyName = MyPropertyInfoObject.Name;
var propertyValue = MyPropertyInfoObject.GetValue(myObject, null);

foreach 循环使您可以访问您的类型的所有属性,您还可以拥有一个知道其名称的特定属性,如下所示:

var MyPropertyInfoObject = myType.GetProperty("propertyName");
于 2012-07-24T07:20:10.737 回答
1

利用 taskName.GetValue(yourObject,null)

whereyourObject应该是ProjectTask. 例如,

ProjectTask yourObject = (ProjectTask)xmlSerializer.Deserialize(stream)

var propDict = typeof(ProjectTask)
                  .GetProperties()
                  .ToDictionary(p => p.Name, p => p.GetValue(yourObject, null));
于 2012-07-24T06:56:49.793 回答