.NET の XML シリアライゼーションの Java 版は何ですか?
11 に答える
2008 回答 このための「公式」Java API は、現在 JAXB (XML バインディング用 Java API) です。Oracle によるチュートリアル を参照してください。リファレンス実装はhttp://jaxb.java.net/にあります
2018 Update Java EE および CORBA モジュールは、JDK9 の SE で廃止され、JDK11 の SE から削除されることに注意して ください。したがって、JAXB を使用するには、アプリケーション サーバーなどにバンドルされている既存のエンタープライズ クラス環境に配置するか、手動で導入する必要があります。
XStreamは、多くの構成や費用をかけずに、オブジェクトを XML にシリアライズするのに非常に優れています。(これは BSD ライセンスの下にあります)。
私たちのプロジェクトの 1 つで、プレーンな古い Java シリアライゼーションを置き換えるためにそれを使用しましたが、ほとんどそのままで機能しました。
「単純な XML シリアル化」プロジェクト
Simple XML Serializationプロジェクトを参照してください。これは、.Net の System.Xml.Serialization に最も近いものです。
JAXB は、JDK 標準版バージョン 1.6+ の一部です。FREE
そのため、追加のライブラリをダウンロードして管理する必要はありません。簡単な例はここにあります
XStream は死んでいるようです。最後の更新は 2008 年 12 月 6 日でした
Simple
。JAXB と同じくらい簡単でシンプルに思えますが、企業での使用を評価するためのライセンス情報が見つかりませんでした。
バージョン 1.4 以降、Java にはクラス java.beans.XMLEncoder および java.beans.XMLDecoder があったことに注意してください。これらのクラスは XML エンコーディングを実行しますが、これは少なくとも XML シリアライゼーションに匹敵するものであり、状況によってはうまくいくかもしれません。
クラスが getter と setter の JavaBeans 仕様に準拠している場合、このメソッドは簡単に使用でき、スキーマは必要ありません。次の注意事項があります。
- 通常の Java シリアライゼーションと同様に
- InputStream と OutputStream で実行されるコーディングとデコード
- このプロセスでは、おなじみの writeObject および readObject メソッドを使用します
- 通常の Java シリアライゼーションとは対照的に
- エンコーディングだけでなく、デコーディングもコンストラクタとイニシャライザを呼び出します
- クラスが Serializable を実装しているかどうかに関係なく、エンコードとデコードが機能します
- 一時的な修飾子は考慮されません
- パブリック コンストラクターを持つパブリック クラスに対してのみ機能します。
たとえば、次の宣言を使用します。
public class NPair {
public NPair() { }
int number1 = 0;
int number2 = 0;
public void setNumber1(int value) { number1 = value;}
public int getNumber1() { return number1; }
public void setNumber2(int value) { number2 = value; }
public int getNumber2() {return number2;}
}
このコードの実行:
NPair fe = new NPair();
fe.setNumber1(12);
fe.setNumber2(13);
FileOutputStream fos1 = new FileOutputStream("d:\\ser.xml");
java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1);
xe1.writeObject(fe);
xe1.close();
次のファイルになります。
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_02" class="java.beans.XMLDecoder">
<object class="NPair">
<void property="number1">
<int>12</int>
</void>
<void property="number2">
<int>13</int>
</void>
</object>
</java>
XML のスキーマがある場合、XMLBeansはうまく機能します。スキーマ用の Java オブジェクトを作成し、使いやすい解析メソッドを作成します。
XMLにシリアル化可能なオブジェクトを作成する必要がある場合は、通常、jaxbまたはXMLBeansを使用します。これで、 XStreamは邪魔にならず、非常にシンプルなAPIを備えているため、非常に便利であることがわかります。私はすぐにそれで遊んで、おそらくそれを使うでしょう。私が気付いた唯一の欠点は、相互参照用にオブジェクトのIDを自分で作成できないことです。
@Barak Schiller
XStreamへのリンクを投稿していただきありがとうございます!
オブジェクトの自動 XML シリアル化について話している場合は、Castorをチェックしてください。
Castor は、Java[tm] 用のオープン ソース データ バインディング フレームワークです。これは、Java オブジェクト、XML ドキュメント、およびリレーショナル テーブル間の最短パスです。Castor は、Java から XML へのバインディング、Java から SQL への永続性などを提供します。
JiBXを忘れないでください。
構造化されたソリューション(ORM など)が必要な場合は、JAXB2 が適切なソリューションです。
DOT NET のようなシリアル化が必要な場合は、JavaBeans コンポーネントの長期永続性を使用できます。
選択は、シリアライゼーションの使用によって異なります。