建立一個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);
}
}
}
}
}
}