Любая схема с довольно глубоким вложением затем заканчивается совершенно бесполезными именами.
Я не знаю, как обойти эту проблему, но мой совет по крайней мере уменьшить негативное влияние таков: определите список псевдонимов для ужасно названных типов. Таким образом, вы можете написать код, который не является полностью нечитаемым, не теряя способности к регенерации.
using AgentAddress = Example.Namespace.DataContract.RootElementNestedElementAgentAddress;
...
Жаль, что сам этот список должен быть скопирован во все нужные ему файлы кода, но я думаю, что это, по крайней мере, улучшение.