Я взаимодействую с сервером C++, поэтому решил де-/сериализовать свои объекты в XML-строку, которую я отправляю через сокет.Deserializing Java-объект
Я не могу использовать пользовательскую библиотеку, потому что на стороне сервера я не могу устанавливать большие библиотеки, поскольку пространство ограничено, поэтому код должен быть как можно меньше.
До сих пор я написал первую версию сериализации моих объектов посредством отражения, которое было довольно легко сделать. В настоящее время я использую только 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>
Теперь я пытаюсь реализовать desrialization и я сталкиваясь с проблемой возврата значений из строки в фактические значения.
Для примитивов и класса строк это тривиально, но мне интересно, что делать с пользовательскими классами позже.
Я думал, что, если я возвращусь в классы членов, он должен полностью свалиться на примитивы, или я там не прав? Я установил сериализацию таким образом, чтобы я мог повторно сериализовать элементы и подклассы, которые не являются примитивными или строками.
Я что-то упустил или я правильно понял? Если бы я сделал это так, смогу ли я правильно десриализовать и сложные классы?
В настоящее время я игнорирую проблему ссылок, так как первым шагом будет десериализация только простого простого класса.
Ваша программа должна десериализоваться в XML? Если нет, то другой формат, такой как JSON, может быть лучшим выбором, поскольку он упрощает сериализацию и десериализацию. – keelar
Я выбрал XML, потому что он уже находится на нашей серверной системе и поэтому является одной из внешних библиотек, которые я могу использовать, не помещая их в свое местное пространство.Также я хотел получить опыт работы с XML, поскольку мы используем это довольно много в других проектах, поэтому для меня это был естественный выбор. – Devolus