Десериализация сериализованного файла Java в C # - PullRequest
3 голосов
/ 25 августа 2011

У меня есть проект Java, который сериализует некоторые объекты и объекты в файл с такими функциями, как

ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(RANK_SIZE);
oos.writeObject(_firstArray);
oos.writeObject(_level[3]);
oos.writeObject(_level[4]);
...

Теперь у меня возникли проблемы с десериализацией этого файла с помощью C # (пробовал BinaryFormatter), поскольку он, очевидно, может десериализовать весь файл только в один объект (или массивы, но у меня разные объекты с разными длинами).

Сначала я попытался перенести генерацию этих файлов на C #, но с треском провалился. Эти файлы небольшие, и я не должен генерировать их сам.

Нужно ли мне изменять способ генерации этих файлов в Java или я могу десериализовать его каким-либо образом?

Ответы [ 3 ]

10 голосов
/ 25 августа 2011

В стандартной среде .NET нет ничего, что знало бы, как десериализовать объекты Java. Вы теоретически можете использовать спецификацию сериализации Java и написать свой собственный код десериализации на C #. Но это будет большой и сложный проект, и я не думаю, что вы найдете много клиентов, заинтересованных в его использовании.

Гораздо проще было бы изменить способ сериализации данных, чтобы использовать переносимый формат: JSON или некоторую форму XML. Существуют библиотеки Java и C # для работы с такими форматами, и общая нагрузка будет на несколько порядков меньше. Я бы предпочел этот второй подход.

5 голосов
/ 25 августа 2011

Может быть, на первый взгляд нелогичным решением может быть их сериализация в какой-то общепонятный формат, например JSON?Я даже не уверен, что двоичный формат для сериализованных объектов в Java гарантированно останется неизменным между версиями Java ....

Джексон - мой личный фаворит, когда дело доходит до библиотек Java JSON.

3 голосов
/ 25 августа 2011

http://www.ikvm.net/ IKVM может сделать это отлично.

...