Стратегия многосегментной (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.
Ответ 2
Буферы протокола (Сайт Google)
Учебник по Java
Jon Skeet С# Port
Marc Gravell С# Port
Upsides: Fast и вы можете столкнуться с некоторыми людьми, которые связаны с этой штукой на SO..; -)
Позвольте мне использовать сайт проекта Marc: Производительность вполне приемлема.
Ответ 3
Двоичная сериализация по умолчанию для каждого языка несовместима, поэтому вы не сможете ее использовать.
Существует много технологий многоязыковой сериализации, которые поддерживают Java, С# и другие языки:
Из них JSON не является двоичным, но очень эффективным для строкового языка. Thrift и Protocol Buffers являются двоичными и имеют очень компактное представление.
Ответ 4
Вы можете попробовать Hessian:
http://hessian.caucho.com/index.xtp
Он двоичный и поддерживает Java, С++ и несколько других языков. Я никогда не использовал его сам, но наткнулся на него, подумал, что это интересно, и добавил его в закладки...
Ответ 5
Google Буферы протокола - это то, что вы могли бы изучить. Вам нужно будет проверить состояние удобства использования С#, но во всех остальных отношениях я думаю, что он соответствует вашим потребностям.
Ответ 6
вы можете использовать BSON, если вам действительно нужны данные как двоичные...
http://bsonspec.org/implementations.html
Ответ 7
Вы можете использовать библиотеку сериализации перекрестной платформы wox (https://github.com/codelion/wox), она основана на собственных XML-сериализаторах для Java и С#.
Ответ 8
Я не верю, что двоичная сериализация будет работать, поскольку С# и Java не имеют представления о родственных типах друг друга.
Ответ 9
Я отвечу на большинство других ответов здесь в отношении буферов протокола Google. Но в итоге я использовал программу protostuff на Java-конце вместо собственной реализации Java Java, и я также добавил имя (outermost) -класс в качестве префикса для данных буферов протокола, чтобы сделать самоописание данных для десериализации. Подробности здесь: fooobar.com/info/338470/...