Среда выполнения в большинстве случаев сможет автоматически определять, как выполнить маршалинг данных между собственным и управляемым кодом, поэтому обычно вам не нужно указывать атрибут.MarshalAs
необходимо только в том случае, если в определении есть неоднозначность (и вы хотите точно указать среде выполнения, как нужно упорядочить данные) или если вам требуется поведение не по умолчанию.
По моему опыту, MarshalAs
действительно требуется только при работе со строками, поскольку в нативном коде так много разных представлений;Unicode / ANSI, C-строки или нет, и т. д.