簡體   English   中英

序列化Java對象並在C#中反序列化

[英]Serializing a Java object and deserializing in C#

我正在編寫一個需要將許多狀態變量從Java傳遞到C#的應用程序。 為此,我需要序列化整個對象,然后以某種方式在C#中反序列化它,並在C#中啟動相應的對象。 這可能嗎?

我可以為此使用默認的Java序列化嗎? 如果是,怎么辦?

PS:有問題的對象來自抽象類。 擴展此抽象類的類是需要序列化的類,其定義可以根據用戶的喜好而有所不同。

PPS:在無數次重定向到Google開發人員頁面之后,我正在考慮使用WOX(主要是因為它非常“易於使用”),但是它似乎已經過時了,並且最近幾年沒有新的更新。 有沒有其他可比的易用性替代方法?

我可以為此使用默認的Java序列化嗎?

默認Java序列化的含義是二進制還是文本。 如果其二進制格式為“否”,則由於Java(字節碼)、. Net(IL)這兩個框架之間的二進制標准不同,您將無法這樣做。 使它們兼容並不容易。 如果它的文本(例如Json,Xml或可能是自定義文本格式)應該是容易實現的,並且這就是Web服務和Rest API在不同系統之間進行通信所使用的東西,它們使用基於文本的Http序列化作為傳輸協議。

Web服務 -肥皂(Http + Xml),是對Json的改裝,不是原始規范的一部分。

Rest API -Http + Json / Xml,實際上與Java腳本無縫集成

不,您不能使用默認的序列化,因為java和c#沒有兼容的序列化器。 您必須實現兩次該類,並使用自己的代碼在兩種語言之間進行翻譯。

要將類實例從Java移到c#,您需要收集java類的所有屬性,並使用它們實例化新的c#對象。

您可以手動執行此操作,也可以使用諸如Googles協議緩沖區之類的幫助器。

編輯:protobuf的示例:Protobuf只能保存您的數據,而不是類邏輯。 它不知道面向對象的概念。 可以這樣翻譯一個抽象的Java類:

Java類:

abstract class Abs{
   int i;
}
class Real extends Abs{
   int k;
}

Protobuf:

message Abs{
    optional int32 i = 1;
}
message Real{
    optional Abs   base = 1;
    optional int32 k    = 2;
}

您可以將對象轉換為xml,然后將xml傳遞給C#,然后再次可以將xml轉換為C#對象或以其他方式檢索的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM