4 votes

simple marshalling unmarshalling objects

Le support JSON est l'une des nouvelles fonctionnalités de Delphi 2009 et Delphi 2010. Je veux savoir s'il existe une fonction simple pour effectuer directement le marshalling/unmarshalling entre une chaîne de caractères et un objet, comme dans la bibliothèque SuperObject.

Exemple:

MyKnownObject := FromJSON('{name:"francis", surname:"lee"}');

2voto

John Thomas Points 2908

Voir ici. Ci-dessous se trouve la partie intéressante :

procedure TForm13.Button4Click(Sender: TObject);
var
  LContact: TContact;
  oMarshaller: TJSONMarshall;
  crtVal: TJSONValue;
begin
  LContact:=TContact.Create; //our custom class
  LContact.Name:='wings-of-wind.com';
  LContact.Age:=20; //remplir avec des données
  oMarshaller:=TJSONMarshal.Create(TJSONConverter.Create); //notre moteur
  try
    crtVal:=oMarshaller.Marshal(LContact); //sérialiser en JSON
    Memo1.Text:=crtVal.ToString; //afficher
  finally //nettoyage
    FreeAndNil(LContact);
    FreeAndNil(oMarshaller);
  end;
end;

Vous pouvez également voir ici un exemple plus compliqué par Adrian Andrei (l'architecte de DataSnap) ainsi qu'un exemple de marshaling personnalisé ici.

1voto

Warren P Points 23750

J'ai essayé ceci mais cela n'a pas fonctionné : ...

var

 j:TJSONObject;

begin

 j := TJSONObject.Create;
 j.ParseJSONValue( BytesOf('{name:"francis", surname:"lee"}'),0);
...

end;

1voto

Juraj Blahunka Points 5620

Désérialiser une chaîne directement en TJSONObject

var
  ConvertFrom: String;
  JSON: TJSONObject;
  StringBytes: TBytes;
  I: Integer;
begin
  ConvertFrom := '{"name":"quelqu'un sur SO","age":"123"}';
  StringBytes := TEncoding.ASCII.GetBytes(ConvertFrom);
  JSON := TJSONObject.Create;
  try
    JSON.Parse(StringBytes, 0);
    Assert(JSON.ToString = ConvertFrom, 'Test de conversion');
    Memo1.Lines.Add(JSON.ToString);

    for I := 0 to JSON.Size - 1 do
      Memo1.Lines.Add(JSON.Get(I).JsonString.Value + 
         ' : ' + JSON.Get(I).JsonValue.Value);

  finally
    JSON.Free;
  end;
end;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X