2013-07-23 31 views
6

假設java類的所有字段都是java原語,如果這樣的對象已經被序列化了,它可以被C#成功地反序列化爲一個「等價」的C#類的實例嗎?可以通過C#反序列化一個序列化的簡單java對象嗎?

是可能的反向 - C#到java?


我知道有很多語言無關的格式,如XML,可能是使用來完成這項工作。我對使用本地序列化數據是否可行表示更感興趣。

+0

不,我沒有嘗試過。以爲我會先問,以防萬一不可能。 – Bohemian

回答

1

這是不可能的,至少不使用這兩個框架提供的本地序列化庫,如this之前的SO帖子中所述。

如果要實現跨語言序列化/反序列化,你可以求助於XML(XSTream針對Java,XStream-dot-net對於C#)或WOX

WOX是Java和C#對象的XML序列化。換句話說,WOX 是一個庫(用於Java的woxSerializer.jar,用於C#的 的woxSerializer.dll),用於將Java和C#對象序列化爲XML並返回。

+1

這是不正確的。自Java版本1.1.7以來,Java序列化格式被公開記錄並保持穩定。假設Java類的所有字段都是Java原語,沒有理由不能將Java對象反序列化爲C#,除非您必須自己實現解析器。 – zneak

1

WOX將有助於實現可互操作的序列化。
可以serialize/deserializeJava/C#對象into/from標準XML(獨立於平臺)

5

串行化流的格式是可用的。我認爲你可以輕鬆編寫一個類來解析字節流並在C#中創建所需的類。

的一篇文章,它指定序列化格式: http://www.javaworld.com/community/node/2915

+0

這是我想知道的更多。我的C#知識是非常有限的,但如果它可以被描述,它可以被編程... – Bohemian

+0

它只是字節[]遍歷。你可以看一個示例java代碼來遍歷序列化字節[link](https://github.com/smartplatf/a-utilities/blob/master/src/main/java/org/anon/utilities/serialize/ srdr/SerialStreamReader.java)。我們修改了默認的序列化,所以我們的遍歷有點不同。我們已經習慣於檢測骯髒的領域。 – Raji

+1

序列化格式的更正式的定義可以[在官方的Java文檔中找到](http://docs.oracle.com/javase/7/docs/platform/serialization/spec/protocol.html)。 – zneak

0

如果你與其他包括依賴OK,你可以考慮使用對象數據庫,如db4o作業。我還沒有嘗試過這個自己,但根據維基百科的文章,

db4o的使用所謂的「通用反射器」來表示類信息的自定義功能,當類定義是不可用的,它允許在混合使用它Java-.NET環境,例如Java客戶端 - .NET服務器,反之亦然。

您可以找到有關上述反射API herehere的更多信息。簡而言之,這將導致您將Java/C#對象存儲到(嵌入式)數據庫(即,沒有客戶端/服務器架構,但通過加載包含整個數據庫的單個文件)的系統,以及事後從數據庫中檢索C#/ Java對象。

相關問題