Предостережение, я парень по Java, поэтому первая часть моего ответа посвящена тому, что возможно в C #.
Во-первых, с помощью настраиваемого сериализатора в Java вы можете делать практически все, что захотите, включая непосредственную установку значений защищенного или частного поля с использованием отражения, если диспетчер безопасности не предотвращает эту операцию. Я не знаю, есть ли в C # аналогичные компоненты для менеджера безопасности, доступа к полям и пользовательских сериализаторов, но я подозреваю, что они есть.
Во-вторых, я думаю, что есть фундаментальная разница в том, как вы просматриваете веб-сервисы и интерфейс веб-сервисов как часть вашего приложения. Вы щелкаете правой кнопкой мыши, генерируя интерфейс веб-службы из существующего кода, известного как «сначала код». Есть много статей о том, почему WSDL сначала является предпочтительным подходом. Этот достаточно хорошо суммирует, но я бы рекомендовал прочитать и другие. Хотя вы думаете с точки зрения библиотеки общего кода между клиентской и серверной сторонами вашего веб-сервиса и сохранением структуры и доступности объектов, такой гарантии нет, если вы публикуете API как веб-сервис и не имеете контроля над ним. все потребители. WSDL и XSD служат общим описанием вашего API веб-службы, а ваш сервер и клиент могут быть реализованы с использованием различных конфигураций привязки данных, классов объектов или языков. Вы должны думать об интерфейсе вашего веб-сервиса и о XML, который вы передаете и выводите из него, как описание семантики обмена, но не обязательно синтаксиса данных (структуры вашего класса), как только они интернализуются (десериализуются) в вашем клиенте или сервер.
Кроме того, рекомендуется отделить структуры, связанные с транспортом, от внутренних структур бизнес-логики, чтобы вам не пришлось одновременно проводить рефакторинг как реализации вашего сервера, API веб-службы, так и ваших (и других) клиентских реализаций. .