Я думаю, что ссылки, которые Митч включил в свой ответ, определенно помогают. Другая вещь, которая поможет вам определить, какие типы CLR использовать, это тип привязки, который вы собираетесь использовать? Если вы используете привязки NetXXX (например, NetTcpBinding), вы предполагаете, что клиент будет клиентом .NET, и для этого оптимизирована кодировка сообщений. Возможно, вам лучше использовать байтовый массив для этих типов вместо строки base64. Если вы собираетесь взаимодействовать (и использовать WebHttpBinding или WSHttpBinding, или какую-либо другую совместимую привязку), то, возможно, лучше использовать строку base64 (как предложил Кирк). Он не будет оптимизирован для скорости / размера, но вы не зависите от того, что .NET находится на клиенте.
Надеюсь, это поможет!