2012-06-08 4 views
7

Как я могу преобразовать любой тип record в один String и обратно? Возможно, загрузите запись в поток и прочитайте ее как строку? В записях, которые я использую, не будут включены какие-либо специальные типы - они просто используют простые вещи, такие как String, Integer, PChar, DWORD и Array of [String] и т. Д. И ничего подобного классам или функциям.Конвертировать любую запись в строку и обратно?

Эта строка будет сохранена в различных местах, таких как плоский текстовый файл, запись в базе данных, отправленная по сети и т. Д. Содержимое строки может быть передано другими способами между каждым из них, например, копирование строки из текстового файла и сохранения его в записи базы данных. Общая идея состоит в том, что строка будет достаточно совместима, чтобы сэкономить где угодно, переместить ее и загрузить обратно в исходное состояние. Я понимаю, что мне нужно уметь распознавать то, что типа записи и назначить его соответственно, и этой части мне не нужна помощь.

+1

Вероятно, нет. :-) Теперь вы можете указать проблему, которую пытаетесь решить, поэтому мы можем предложить правильный способ ее решения? Какой смысл конвертировать что-либо, что не является строкой для строки, только для ее преобразования? –

+2

В качестве взлома вы можете записать запись в поток памяти, как вы предлагаете, а затем преобразовать байты этого потока памяти в строку шестнадцатеричных значений. Это можно отменить. Конечно, людям будет сложно расшифровать строку :) –

+0

@ 500-InternalServerError Это отлично, ответьте на образец, конвертируя каждый путь, и я приму его: D –

ответ

7

Вы можете сериализовать свою запись с использованием RTTI, здесь вы можете использовать XML, JSON или другой формат, чтобы сохранить данные записи.

Если вы не хотите писать свой собственный метод для сериализации записей, попробуйте эти альтернативы.

  • superobject (с использованием класса TSuperRttiContext вы можете сериализовать запись в формате JSON)
  • TKBDynamic
  • SynCommons блок из Synopse.
  • XmlSerial блок (Object и запись Сериализация и де-сериализации XML) от Роберта Любовь
+0

Не все типы, которые могут содержаться в записи, доступны через RTTI, включая новый расширенный RTTI. Таким образом, это не будет преобразовывать * любую * запись в строку. (Не вниз, просто комментируя неопределенность вопроса, из-за которого трудно ответить.) Как вы, например, конвертируете запись, содержащую перегруженные операторы или методы? Что относительно записей, которые содержат другие записи? –

+1

@KenWhite Я использовал RTTI для сериализации записей без проблем, но, действительно, может существовать ряд сложных записей, которые сложно сериализовать. Во всяком случае, я не знаю, что вы имеете в виду. .. Как вы конвертируете запись, содержащую перегруженные операторы или методы 'потому что, когда вы сериализуете запись или объект, вам нужно только сохранить поля и/или свойства. – RRUZ

+0

@RRUZ: Родриго, я хочу сказать, что вопрос слишком расплывчатый. «Преобразовать запись в строку» означает сохранение и повторную загрузку позже локально или означает перенос ее в другую систему? Означает ли это только данные (поля и свойства) или всю структуру записей? Я не отказал вам в ответе, потому что это, вероятно, правильно, но сам вопрос нужно отредактировать, чтобы дать понять, что намерение (проблема, которая должна быть решена), так что может быть предоставлен правильный ответ на вопрос. –

Смежные вопросы