Aggiungerei una cosa: oltre al controllo sulla possibilità di serializzare una proprietà controllerei che la proprietà stessa non sia readonly, ovviamente questo darebbe problemi quando si tenta di settare la proprietà.
quindi:
codice:
HashTable htTBProperties = new HashTable();
Type tb = testoTextBox.GetType();
foreach(PropertyInfo PI in tb.GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
Type PropType = PI.PropertyType;
if (PropType.IsSerializable && PI.CanWrite)
htTBProperties.Add(PI.Name, PI.GetValue(testoTextBox, null));
}