В случае, если кто-то столкнется с той же проблемой, я покажу решение, которое я выбрал.
Идея состоит в том, чтобы фасад оригинального поля был таким:
[DataContract]
class Foo
{
Foo _FooOriginal;
[DataMember]
Foo _Foo {
get {
return whatever ? _FooOriginal : null;
}
set {
_FooOriginal = value;
}
}
}