Delphi Can

Orjinalini görmek için tıklayınız: Rest.JSON array serilize hk
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
Selamlar,

.net tarafında sık kullandığım bir yöntem delphi tarafında lazım oldu, ben mi yöntemi yanlış kullanıyorum acaba.

[{"RecId":2,"active":false,"column_name":"siyk","column_value":"yakup","isBold":true,"isItalic":false,"fontSize":10,"color":"clMaroon"},{"RecId":1,"active":false,"column_name":"sd","column_value":"Bilinmiyor","isBold":false,"isItalic":true,"fontSize":8,"color":"clRed"}]

böyle bir json datam var. aşağıdaki gibi bir sınıfım var deneme yanılma karıştır biraz Smile 


unit ColumnCellsFormat;

interface

type
 TColumnCellsItems = class
 private
   FActive: Boolean;
   FColor: string;
   // [JSONName('column_name')]
   // FColumnName: string;
   // [JSONName('column_value')]
   // FColumnValue: string;
   FFontSize: Integer;
   FIsBold: Boolean;
   FIsItalic: Boolean;
   FRecId: Integer;
 published
   property Active: Boolean read FActive write FActive;
   property Color: string read FColor write FColor;
   // property ColumnName: string read FColumnName write FColumnName;
   // property ColumnValue: string read FColumnValue write FColumnValue;
   property FontSize: Integer read FFontSize write FFontSize;
   property IsBold: Boolean read FIsBold write FIsBold;
   property IsItalic: Boolean read FIsItalic write FIsItalic;
   property RecId: Integer read FRecId write FRecId;
 end;

 TColumnCellsFormatRoot = class
 private
   FItemsArray: TArray<TColumnCellsItems>;
 protected
 published
   property ItemsArray: TArray<TColumnCellsItems> read FItemsArray write FItemsArray;
 public
 end;

implementation

end.


Normalde Jsonu bu şekilde objeye çevirebilmem gerekiyor. galiba ama olmadı

obj := TJson.JsonToObject<TColumnCellsFormatRoot>(JSONString);

.netteki gibi denedim ona da kızıyor 
obj := TJson.JsonToObject<TArray<TColumnCellsItems>>(JSONString);

4 dil arasında git gel olunca kafa patlıcan oluyor Smile nerede yanlış yapıyorum.
Düzenleme,

Rest.Json Array dizisi seriliaze işlemini desteklemiyormuş , Önce System.json ile Array olarak okuyup, array içerisinde dönerek içindeki her bir objeyi seriliaze etmek gerekiyormuş. Hala .net konforu gelememiş delphiye.
Alternatif olarak (sıklıkla tercih ediyorum), aşağıdaki linkte online JSON Serialize/Deserialize işlemlerini sorunsuz ve belirttiğiniz konforda gerçekleştiren sınıf yapısını kullanabilirsiniz.
https://jsontodelphi.com/
(26-11-2024, Saat: 15:47)RAD Coder Adlı Kullanıcıdan Alıntı: [ -> ]Alternatif olarak (sıklıkla tercih ediyorum), aşağıdaki linkte online JSON Serialize/Deserialize işlemlerini sorunsuz ve belirttiğiniz konforda gerçekleştiren sınıf yapısını kullanabilirsiniz.
https://jsontodelphi.com/

Yok abi ana gövde array olduğunda işe yaramıyor.
(26-11-2024, Saat: 16:28)yhackup Adlı Kullanıcıdan Alıntı: [ -> ]
(26-11-2024, Saat: 15:47)RAD Coder Adlı Kullanıcıdan Alıntı: [ -> ]Alternatif olarak (sıklıkla tercih ediyorum), aşağıdaki linkte online JSON Serialize/Deserialize işlemlerini sorunsuz ve belirttiğiniz konforda gerçekleştiren sınıf yapısını kullanabilirsiniz.
https://jsontodelphi.com/

Yok abi ana gövde array olduğunda işe yaramıyor.

Emin misin?
Bak test ederim.  Shy
(26-11-2024, Saat: 16:36)RAD Coder Adlı Kullanıcıdan Alıntı: [ -> ]
(26-11-2024, Saat: 16:28)yhackup Adlı Kullanıcıdan Alıntı: [ -> ]Yok abi ana gövde array olduğunda işe yaramıyor.

Emin misin?
Bak test ederim.  Shy

Kesin bilgi bile diyebilirim belki zorlasam, ama senin uzmanlık alanın bir şey de diyemedim şimdi Smile
Baya denedim çeşitli senaryolarla ısrarla obje olacak array olmaz dedi internette araştırdım bir kaç kaynakta bu bilgiye ulaştım.
[attachment=2815]

Örnek proje: [attachment=2816]
Uyguladığınız JSON metodu doğru. Belki nesne dizisi oluştururken birşeyler gözden kaçmış olabilir.

//Nesneden JSON ifadesine
var
 Cells: TColumnCellsFormatRoot;
 CellItems: TArray<TColumnCellsItems>;
begin
 Cells := TColumnCellsFormatRoot.Create;
 SetLength(CellItems, 2);
 CellItems[0] := TColumnCellsItems.Create;
 CellItems[0].Active := True;
 CellItems[0].Color := 'red';

 CellItems[1] := TColumnCellsItems.Create;
 CellItems[1].Active := True;
 CellItems[1].Color := 'blue';

 Cells.ItemsArray := CellItems;

 var JObj := TJSON.ObjectToJsonObject(Cells, [joIndentCasePreserve]);
 try
   Memo1.Text := JObj.ToJSON;
 finally
   JObj.Free;
 end;

 for var Item in Cells.ItemsArray do
   Item.Free;
 Cells.Free;

// JSON ifadesinden Nesneye
var
  Cells: TColumnCellsFormatRoot;
begin
  Cells := TJSON.JsonToObject<TColumnCellsFormatRoot>(Memo1.Text);
  for var Items in Cells.ItemsArray do
  begin
    Memo1.Lines.Add(Items.Color);
  end;

  for var Item in Cells.ItemsArray do
    Item.Free;
  Cells.Free;
(27-11-2024, Saat: 02:17)delphi.developer Adlı Kullanıcıdan Alıntı: [ -> ]Uyguladığınız JSON metodu doğru. Belki nesne dizisi oluştururken birşeyler gözden kaçmış olabilir.

Cells := TJSON.JsonToObject<TColumnCellsFormatRoot>(Memo1.Text);

Bu satırda hata vermiyor mu ?
(27-11-2024, Saat: 08:37)yhackup Adlı Kullanıcıdan Alıntı: [ -> ]
(27-11-2024, Saat: 02:17)delphi.developer Adlı Kullanıcıdan Alıntı: [ -> ]Uyguladığınız JSON metodu doğru. Belki nesne dizisi oluştururken birşeyler gözden kaçmış olabilir.

Cells := TJSON.JsonToObject<TColumnCellsFormatRoot>(Memo1.Text);

Bu satırda hata vermiyor mu ?

Hata vermiyor. Akabinde iterasyonla dizideki tüm nesne özelliklerine erişim sağlayabiliyorum. Belirtmekte faydası olabilir belki, 11.3 sürümünü kullanıyorum.
Sayfalar: 1 2