Type type = this.GetType();
PropertyInfo[] properties = type.GetProperties();
reader.Read();
while (reader.Read())
{
    PropertyInfo property = properties.GetPropertyByXmlElement(reader.Name);
    if (property != null)
    {
        property.SetValue(this, reader.ReadElementContentAs(property.PropertyType, null));
    }
}
this is the extension method `GetPropertyByXmlElement(string)`
public static PropertyInfo GetPropertyByXmlElement(this PropertyInfo[] properties, string name)
{
    XmlElementAttribute attr = new XmlElementAttribute(name);
    PropertyInfo property = (
        from p in properties
        where p.GetCustomAttributes().Any(a => a.Equals(attr))
        select p)
        .FirstOrDefault();
    return property;
}
	    