4

json支持是delphi 2009和delphi 2010的新功能之一。我想知道是否有任何简单的函数可以像在超级对象库中那样直接在字符串和对象之间进行编组/解组。

例子:

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

2 回答 2

2

这里。贝娄剪掉了有趣的部分:

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; //fill with some data
  oMarshaller:=TJSONMarshal.Create(TJSONConverter.Create); //our engine
  try
    crtVal:=oMarshaller.Marshal(LContact); //serialize to JSON
    Memo1.Text:=crtVal.ToString; //display
  finally //cleanup
    FreeAndNil(LContact);
    FreeAndNil(oMarshaller);
  end;
end;

您还可以在此处查看 Adrian Andrei(DataSnap 架构师)更复杂示例以及自定义编组示例。

于 2010-01-11T17:05:54.833 回答
1

将字符串直接反序列化为TJSONObject

var
  ConvertFrom: String;
  JSON: TJSONObject;
  StringBytes: TBytes;
  I: Integer;
begin
  ConvertFrom := '{"name":"somebody on SO","age":"123"}';
  StringBytes := TEncoding.ASCII.GetBytes(ConvertFrom);
  JSON := TJSONObject.Create;
  try
    JSON.Parse(StringBytes, 0);
    Assert(JSON.ToString = ConvertFrom, 'Conversion test');
    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;
于 2010-02-15T14:33:00.383 回答