私は C++ サーバーとインターフェイスしているので、ソケット経由で送信する XML 文字列にオブジェクトをデシリアライズ/シリアル化することにしました。
サーバー側ではスペースがかなり限られているため、大きなライブラリをインストールできないため、カスタムライブラリを使用できません。そのため、コードはできるだけ小さくする必要があります。
これまでのところ、リフレクションを介してオブジェクトをシリアル化する最初のバージョンを作成しましたが、これは非常に簡単でした。現在は と しか使っていませint
んString
が、これを土台にして後から伸ばしていきたいので、なるべく下地を整えたいと思います。
XML にシリアル化すると、値はもちろん文字列表現になります (これがどのように見えるかの例です)。
<serializable classname="client.ServerTask">
<member classname="int" isnull="false" name="mTaskId" primitive="true">
<value>
<![CDATA[35]]>
</value>
</member>
<member classname="java.lang.String" isnull="false" name="mName" primitive="false">
<value>
<![CDATA[TestServer]]>
</value>
</member>
<member classname="int" isnull="false" name="mPID" primitive="true">
<value>
<![CDATA[512]]>
</value>
</member>
<member classname="int" isnull="false" name="mStatus" primitive="true">
<value>
<![CDATA[32768]]>
</value>
</member>
</serializable>
今、逆シリアル化を実装しようとしていますが、値を文字列から実際の値に戻すという問題に直面しています。
プリミティブと文字列クラスの場合、これは些細なことですが、カスタム クラスについては後でどうすればよいのでしょうか。
私は、メンバークラスに再帰的に降りると、それはずっとプリミティブになるはずだと思っていましたか、それとも間違っていますか? プリミティブでも文字列でもないメンバーとサブクラスを再帰的にシリアライズできるようにシリアライズを設定しました。
私は何かを見逃していますか、それとも私の理解は正しいですか? このようにすると、複雑なクラスも適切にデシリアライズできますか?
現在、最初のステップはストレートで単純なクラスのみを逆シリアル化することであるため、参照の問題は無視しています。