Стратегия многосегментной (java и С#) сериализации объектов

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

Ответы

Ответ 1

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

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

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

Для информации, я знаю, что protobuf-net имеет поддержку .NET 2.0; Я, честно говоря, не пробовал это на версии Jon, но я ожидаю, что это не так, вам нужно 3.0/3.5 для protobuf.

Ответ 3

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

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

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

Ответ 4

Вы можете попробовать Hessian:

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

Он двоичный и поддерживает Java, С++ и несколько других языков. Я никогда не использовал его сам, но наткнулся на него, подумал, что это интересно, и добавил его в закладки...

Ответ 5

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

Ответ 7

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

Ответ 8

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

Ответ 9

Я отвечу на большинство других ответов здесь в отношении буферов протокола Google. Но в итоге я использовал программу protostuff на Java-конце вместо собственной реализации Java Java, и я также добавил имя (outermost) -класс в качестве префикса для данных буферов протокола, чтобы сделать самоописание данных для десериализации. Подробности здесь: fooobar.com/info/338470/...