Причина, по которой вы получаете ошибку, в том, что в строке:
SerializeToXmlAsFile(typeof(Hashtable), ht);
в вашем методе button1_Click вы передаете тип Hashtable. Конструктор DataContractSerializer инициализирует себя для сериализации объекта указанного вами типа, в данном случае Hashtable. Следовательно, когда вы передаете ему объект типа MyHashtable при вызове
s.WriteObject(w, targetObject);
он не знает, как это обрабатывать. Все, что вам нужно сделать, чтобы сделать эту работу, это изменить строку на:
SerializeToXmlAsFile(typeof(MyHashtable), ht);