Изменить имя свойства Variant (Delphi)

Я изучаю отличный фреймворк MORMot для Delphi, и я нашел много полезных функций для работы с Variant (в SynCommons).

Теперь я хочу изменить некоторые свойства-имена Variant, но после поиска я не нашел такой функции, поэтому решил написать:

program Project7;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, SynCommons;

function VariantChangeNames(var V: Variant; const FromNames, ToNames: TRawUTF8DynArray): Boolean;
var
  Name: RawUTF8;
  PData: PDocVariantData;
  Val: Variant;
  i, k: Integer;
begin
  Result := False;
  PData := DocVariantData(V);
  i := 0;
  for Name in FromNames do
  begin
    k := PData^.GetValueIndex(Name);
    if k <> -1 then
    begin
      Val := PData^.Value[k];
      PData^.Value[ToNames[i]] := Val;
      PData^.Delete(k); // If delete before setting value, Val will be incorrect.
      Result := True;
    end;
    Inc(i);
  end;
end;

var
  V: Variant;
begin
  V := TDocVariant.New();
  V.Name := 'John';
  V.Age := 20;
  VariantChangeNames(V, ['Name'], ['RealName']);
  Writeln(VariantToString(V)); // {"Age":20,"RealName":"John"}
end.

VariantChangeNames Я написал, может быть, не очень эффективно, так как нужно сделать оба delete а также add, Похоже, что напрямую изменить VName член TDocVariantData это самый эффективный способ, но это частный член.

Любой совет? Заранее спасибо.

Кстати, почтовый сервер официального форума mORMot, кажется, имеет проблему, когда я публикую тему, он показывает:

An error was encountered
Error: Could not connect to smtp host "217.70.184.11" (111) (Connection refused).

1 ответ

Решение

Этот вопрос был решен на форуме mORMot.

Другие вопросы по тегам