Как получить доступ к двоичным объектам в .NET 4? - PullRequest
2 голосов
/ 27 января 2011

Мне нужно прочитать двоичные данные объектов (включая частные поля), чтобы обработать и сериализовать их определенным образом.

Как я могу сделать это в C #, мне нужно кодирование MSIL?

Ответы [ 3 ]

1 голос
/ 27 января 2011

На самом деле это довольно просто.Если вы просто хотите читать двоичные данные (не сериализованные объекты, а необработанные двоичные данные), вы можете использовать BinaryReader.

1 голос
/ 27 января 2011

Вы можете сделать это с помощью отражения и (необязательно) динамической генерации IL.

Например, когда вы знаете тип (т.е. имеете экземпляр System.Type), вы можете перечислить все поля (type.GetFields()возвращает список FieldInfo объектов), а затем используйте метод GetValue для получения значения поля.Это работает с частными полями, если пройдены проверки уровня доверия безопасности.

Это не очень быстро, поэтому вы можете захотеть предварительно скомпилировать код доступа к полю (делайте это только после того, как профилировщик скажет вам!),В этом случае вы можете использовать System.Reflection.Emit и DynamicMethod услуги.(вы можете найти учебники в Google и MSDN; я нашел полезным скомпилировать некоторые функции, которые делают то же, что и я, с C # / F #, а затем проверить вывод MSIL в Reflector / ildasm).

0 голосов
/ 27 января 2011

Начните с реализации ISerializable. Этот интерфейс позволяет вам управлять сериализацией вручную: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...