procedure ClientDataSetToJson(ClientDataSet: TClientDataSet;JsoFile: String); var Json: TlkJSONobject; ChildJson,FieldJson: TlkJSONobject; i: integer; begin Json := TlkJSONobject.Create; FieldJson := TlkJSONobject.Create; ClientDataSet.First; for i := 0 to ClientDataSet.FieldCount - 1 do begin ChildJson := TlkJSONobject.Create; ChildJson.Add('FieldName',ClientDataSet.Fields[i].FieldName); ChildJson.Add('FieldType',Integer(ClientDataSet.Fields[i].DataType)); ChildJson.Add('FieldSize',ClientDataSet.Fields[i].Size); FieldJson.Add(IntToStr(i),ChildJson); end; Json.Add('TableName',FieldJson); while not ClientDataSet.Eof do begin ChildJson := TlkJSONobject.Create; for i := 0 to ClientDataSet.FieldCount - 1 do ChildJson.Add(ClientDataSet.Fields[i].FieldName,ClientDataSet.Fields[i].AsString); Json.Add(IntToStr(Json.Count),ChildJson); ClientDataSet.Next; end; TlkJSONstreamed.SaveToFile(Json,JsoFile); Json.Free; end; procedure JsoToClientDataSet(JsoFIle: string;ClientdataSet: TClientDataSet); var Json: TlkJSONobject; ChildJson,FieldJson: TlkJSONobject; i,j: integer; begin Json := TlkJSONstreamed.LoadFromFile(JsoFIle) as TlkJSONobject; FieldJson := (Json.Field['TableName']) as TlkJSONobject; ClientdataSet.Close; ClientdataSet.FieldDefs.Clear; for i := 0 to FieldJson.Count - 1 do begin ChildJson := FieldJson.field[inttostr(i)] as TlkJSONobject; ClientdataSet.FieldDefs.Add(ChildJson.getString('FieldName'),TFieldType(ChildJson.getInt('FieldType')),ChildJson.getInt('FieldSize')); end; if ClientdataSet.FieldDefs.Count = 0 then Exit; ClientdataSet.CreateDataSet; for i := 1 to Json.Count - 1 do begin ChildJson := Json.Field[IntToStr(i)] as TlkJSONobject; ClientdataSet.Append; for j := 0 to ChildJson.Count - 1 do begin ClientdataSet.Fields[j].AsString := ChildJson.getString(j) end; ClientdataSet.Post; end; Json.Free; end;