Сериализация протобуфа с обфускацией

Я ищу некоторые указания относительно того, что происходит при использовании протобуф-сети с обфускацией (Dotfuscator). Одна половина проекта - это DLL, а другая - EXE-файл, и с помощью proto-buf NET они безошибочно обмениваются данными. Пока я не запутываю DLL.

В этот момент P-BN завершается неудачно, не вызывая исключения, возвращая по-разному байтовый массив длиной 0 или сокращенный в зависимости от того, с чем я возился. Класс довольно прост (VB):

<ProtoContract(Name:="DMailer")> _
Friend Class DMailer

    Private _Lic As Cert
    Private _Sys As Sys
    Private _LList As List(Of LItem)

    ..
    ..
End Class

Есть 3 реквизита, все украшенные ProtoMember, чтобы получить / установить составляющие объекты класса. Подрезал для краткости.

Снова, это работает БОЛЬШОЙ, пока я не запутываю DLL. Затем Dotfuscator переименовывает каждый из них в ноль, по-видимому, так как все они Friend, и это, кажется, душит прото-бафф. Если я освобождаю класс от переименования (только имя класса, а не реквизиты / члены), он снова работает. Имеет смысл, что P-BN сможет работать только с объектами с правильным именем, хотя при запросе сериализации объекта с нулевым именем кажется, что исключение может быть в порядке.

С другой стороны, большая часть прелести PB-N должна быть сериализациейнезависимый имен .NET, работающих с атрибутами - по крайней мере, как я понимаю. Однако в этом случае кажется, что он работает только с классами с именами. Я попробовал, спеть квалификатор или аргумент «Имя», как показано выше, но безрезультатно - он явно не выполняет то, что, как я думал, может.

Итак, мне любопытно, если:

а) ... я в принципе правильно предположил проблему

б) ... есть какой-то другой атрибут или флаг, который может облегчить сериализацию объекта с нулевым именем

в) ... если есть какие-то другие идеи, которые могут помочь.

Если я освобождаю все 3 или 4 класса от переименования Dotfuscator (LList фактически еще не реализован, оставляя DMailer, Cert и Sys), DLL снова работает - по крайней мере, вывод имеет правильный размер. Я могу с этим смириться, хотя затемненные имена были бы лучше: Dotfuscator (CE) либо исключает их, либо задает имена равными Null - мне кажется, я не могу найти способ заставить их переименовать.

Вместо того, чтобы освобождать 3 или 4 класса от переименования, я рассматриваю одну альтернативу - просто сохранить выходные данные Serializer для Cert и Sys как байтовые массивы или строки Base64 в DMailer вместо классов. Затем пусть получатель десериализует каждый объект индивидуально. Приятно иметь возможность распаковывать только одну вещь и иметь свои игрушки прямо там, как по волшебству.

(Много) ТИА

Ответы на вопрос(2)

Ваш ответ на вопрос