建立一个class,class里的属性来自一个xml。属性的名字和xml的节点的名字是一样的。为了不一个一个地判断,使用了反射来给每个属性赋值。
class myclass
{
//属性设置
public string profileid { get; set; }
public string url { get; set; }
public DateTime startdate { get; set; }
public bool bonus { get; set; }
public int max{ get; set; }
//这个函数是内部调用的,所以设置为private。
private void setProperties()
{
string propertyname = "";
XmlReader xr = XmlReader.Create(@“a.xml”);
while (xr.Read())
{
if (xr.IsStartElement())
{
//给属性赋值
propertyname = xr.LocalName.ToLower();
xr.Read();
if (propertyname != "")
{
//检测一下,属性是否存在。如果存在,才继续赋值。不然会出错。
if (this.GetType().GetProperty(propertyname) != null)
{
//主要是使用了Convert.ChangeType来实现。
//但是如果bonus在xml的值是1,就会出错。好像转不到bool型。所以,在xml里,我强制了要写false和true。
this.GetType().GetProperty(propertyname).SetValue(this, Convert.ChangeType(xr.Value, this.GetType().GetProperty(propertyname).PropertyType), null);
}
}
}
}
}
}