Если я правильно понял проблему, то следующий синтаксис должен позволить вам обойти эту проблему.
<%= Html.ActionLink("test", MVC.MyController.MyAction().AddRouteValues(new MyClass() { Number = 5, SomeText = "Hello" })) %>
Я думаю, что ответом для улучшения синтаксиса было бы обернуть каждый параметр не значащего типа в RouteValueDictionary в каждом сгенерированном методе результата действия
Редактировать: (Ответ на комментарий как недостаточно символов)
Ладно, я сумел воссоздать простой пример выше, используя этот метод, чтобы получить: /MyController/MyAction/5/Hello
в качестве URL.
Я не совсем уверен, как вложенные сложные типы будут работать на практике. Вы можете использовать некоторую рекурсию, чтобы погрузиться в объект верхнего уровня и обдумать значения, чтобы добавить их, но затем вы откроете новый набор проблем, например, как справиться с именем дочернего свойства, которое идентично родительскому. Имя свойства.
Кажется, что это может быть сложной проблемой, которая будет работать для всех.
Возможно, какой-то шаблон адаптера был бы наиболее полезен для преобразования сложного объекта в значения маршрута. В простейшем случае это может быть объявление метода расширения ToRouteDictionary, который действует на ваш сложный тип и преобразует его, используя ваши знания о том, как он должен работать. Просто размышляю вслух, поскольку я, очевидно, не в курсе ваших вариантов использования