Deserialize this / Deserialize inside of the instance

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;
}