我正在与 C++ 服务器交互,因此我决定将我的对象反序列化为我通过套接字发送的 XML 字符串。
我不能使用自定义库,因为在服务器端,我不能安装大库,因为空间相当有限,所以代码应该尽可能小。
到目前为止,我已经编写了通过反射序列化我的对象的第一个版本,这很容易做到。目前我只使用int
and 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>
现在我正在尝试实现反序列化,我面临着将值从字符串取回实际值的问题。
对于原语和字符串类,这是微不足道的,但我想知道以后如何处理自定义类。
我在想,如果我递归地进入成员类,它应该一直归结为原始,还是我错了?我以这样一种方式设置序列化,即我可以递归地序列化非原始或字符串的成员和子类。
我错过了什么还是我的理解正确?如果我这样做,我是否能够正确地反序列化复杂的类?
目前我忽略了引用的问题,因为第一步是反序列化一个直接的、简单的类。