Serialize/DeSerialize generic.collection type to from JSON

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Serialize/DeSerialize generic.collection type to from JSON

Сообщение franko_nd » 03.02.2023 15:44:57

Здравствуйте!

Нужна помощь!

System OS Windows 7 x64.
FPC 3.3.1 in CodeTyphon 8.0.

Есть JSON (TJSOnData) :
[{ "id" : "87DC528AF55142CFBB019D98F5ABD0D8", "value" : 178 }, { "id" : "37A2B479C1BE46E8BBC11E05C5BAB75C", "value" : 89 }, { "id" : "7BBA5B77595A4141B7E994473CDAFE39", "value" : 16 }, { "id" : "9A946B8A373344ADBD789D75E7572A03", "value" : 80 }, { "id" : "665D45735D354DBF9A0C665E07BBEA7E", "value" : 90 }]

Необходимо deserialize этого JSON в TListValueBaseParam = class(TList<TValueBaseParam>).
Также необходимо serialize TListValueBaseParam в JSON.

Описание класса :

TValueBaseParam = record
ID : String;
Value : Double;
procedure Clear();
end;

TListValueBaseParam = class(TList<TValueBaseParam>)
function IndexOfID(ID: String): Integer;overload;
procedure ToMemory(MemData: TMemoryStream);
procedure FromMemory(MemData: TMemoryStream);
...
end;
franko_nd
незнакомец
 
Сообщения: 1
Зарегистрирован: 03.02.2023 15:39:48

Re: Serialize/DeSerialize generic.collection type to from JS

Сообщение iskander » 04.02.2023 09:26:37

Вроде ничего сложного быть не должно:
Код: Выделить всё
function TryLoadJson(Data: TJsonData; out List: TList<TValueBaseParam>): Boolean;
var
  ValueBaseParam: TValueBaseParam;
  I: Integer;
begin
  List := TList<TValueBaseParam>.Create;
  try
    for I := 0 to (Data as TJsonArray).Count - 1 do
      with (Data as TJsonArray)[I] as TJsonObject do begin
        ValueBaseParam.ID := Strings['id'];
        ValueBaseParam.Value := Floats['value'];
        List.Add(ValueBaseParam);
      end;
    Result := True;
  except
    FreeAndNil(List);
    Result := False;
  end;
end;

Обратная операция ещё проще
Код: Выделить всё
function ListToJson(List: TList<TValueBaseParam>): TJsonData;
var
  ValueBaseParam: TValueBaseParam;
begin
  Result := TJsonArray.Create;
  for ValueBaseParam in List do
    TJsonArray(Result).Add(CreateJSONObject(['id', ValueBaseParam.ID, 'value', ValueBaseParam.Value]));
end;
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru