Стратегия кросс-языковой (java и c #) сериализации объектов - PullRequest
15 голосов
/ 04 января 2010

Я работаю над проектом, в котором мне нужно будет сериализовать некоторые данные в приложении java 6 и десериализовать его в приложении c # 2.0. Есть ли уже существующая стратегия или что-то, на что я могу обратить внимание, что позволило бы мне сделать это с этими двумя языками? Я предполагаю, что они оба поддерживают сериализацию XML, но мне действительно нужно, чтобы она была двоичной сериализацией.

Ответы [ 9 ]

17 голосов
/ 04 января 2010

Буферы протокола были бы хорошим вариантом здесь. Что касается C #, я бы порекомендовал Jon Skeet dotnet-protobufs для этого варианта использования, поскольку он имеет одинаковый API с обеих сторон (его версия C # является портом версии Google Java, являющейся частью Распределение ядра). Если вы хотите, чтобы C # был более «типичным .NET», тогда protobuf-net может помочь.

(формат проводов между версиями явно идентичен; API может отличаться)

Маленький, быстрый, эффективный, портативный .

Для справки, я знаю , что protobuf-net поддерживает .NET 2.0; Честно говоря, я не пробовал это на версии Джона, но я ожидаю , что это было бы - не так много, что вам нужно для 3.0 / 3.5 в protobuf. * ​​1017 *

9 голосов
/ 04 января 2010

Буферы протокола ( Google Site )

Учебник по Java

Порт C # Джона Скита

Порт C # Марка Гравелла

Перевернутые: Быстро, и вы можете прослушивать довольно много людей, которые связаны с этой штукой на SO ..; -)

Позвольте мне использовать сайт проекта Марка: Производительность вполне приемлема ..

6 голосов
/ 04 января 2010

Двоичная сериализация по умолчанию для каждого языка несовместима, поэтому вы не сможете ее использовать.

Существует много технологий многоязыковой сериализации, которые поддерживают Java, C # и другие языки:

Из них JSON не двоичный, но очень эффективный для строкового языка. Экономичные и протокольные буферы являются двоичными и имеют очень компактное представление.

4 голосов
/ 04 января 2010

Вы можете попробовать гессиан:

http://hessian.caucho.com/index.xtp

Это двоичный файл, поддерживающий Java, C ++ и некоторые другие языки. Я никогда этим не пользовался, но наткнулся на это, подумал, что это интересно, и добавил в закладки ...

3 голосов
/ 03 апреля 2015

вы можете использовать BSON, если вам действительно нужны данные в двоичном виде ...

http://bsonspec.org/implementations.html

3 голосов
/ 04 января 2010

Буферы протокола от Google - это то, что вы можете посмотреть. Вам нужно будет проверить состояние юзабилити реализации C #, но я думаю, что во всех остальных отношениях она соответствует вашим потребностям.

1 голос
/ 03 августа 2014

Вы можете использовать библиотеку межплатформенной сериализации wox (https://github.com/codelion/wox),, она основана на собственных сериализаторах XML для Java и C #.

0 голосов
/ 08 августа 2013

Я повторю большинство других ответов здесь, что касается буферов протокола Google. Но в итоге я использовал программу под названием protostuff на стороне Java вместо собственной реализации Java в Google, и я также добавил имя (самого внешнего) класса в качестве префикса к буферу данных, чтобы сделать самоописание данных для десериализации. Подробности здесь: https://stackoverflow.com/a/17923846/253938

0 голосов
/ 04 января 2010

Я не верю, что двоичная сериализация будет работать, так как C # и Java понятия не имеют о собственных типах друг друга.

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