На моей работе мы явно запрещаем определение serialVersionUID, точно из-за проблем, которые Вы поднимаете.
, Кроме того, классы, которые мы сохраняем, только используются, чтобы хранить данные без логики внутри, таким образом, единственный способ, которым они изменяются, из-за изменения элементов данных.
Expression<Func<string>> expr = () => foo.Bar;
var me = (MemberExpression)((MemberExpression)expr.Body).Expression;
var ce = (ConstantExpression)me.Expression;
var fieldInfo = ce.Value.GetType().GetField(me.Member.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
var value = (Foo)fieldInfo.GetValue(ce.Value);