Мне нужно сериализовать этот json-укус в класс Delphi.
{
"Master":{
"version":"1.0"
},
"Details":[
{
"idColisEntreeDetail":0,
"codeBarre":"123456789"
},
{
"idColisEntreeDetail":0,
"codeBarre":"234567890"
}
]
}
Вот мой класс:
unit unit2;
interface
uses Generics.Collections, Rest.Json;
type
TDetails = class
private
FCodeBarre: String;
FIdColisEntreeDetail: Extended;
public
property codeBarre: String read FCodeBarre write FCodeBarre;
property idColisEntreeDetail: Extended read FIdColisEntreeDetail
write FIdColisEntreeDetail;
end;
TMaster = class
private
FVersion: String;
public
property version: String read FVersion write FVersion;
end;
TMyClass = class
private
FDetails: TList<TDetails>;
FMaster: TMaster;
public
property Details: TList<TDetails> read FDetails write FDetails;
property Master: TMaster read FMaster write FMaster;
constructor Create;
destructor Destroy; override;
end;
implementation
{ TDetails }
{ TMyClass }
constructor TMyClass.Create;
begin
inherited;
FMaster := TMaster.Create();
end;
destructor TMyClass.Destroy;
var
LDetailsItem: TDetails;
begin
for LDetailsItem in FDetails do
LDetailsItem.free;
FMaster.free;
inherited;
end;
end.
Я использую TJson.ObjectToJsonString(TMyClass)
и TJson.JsonToObject<TMyClass>(AJsonString)
.
Моя проблема в том, что при сериализации типа TList<TDetails>
генерируется много мусора. Например
{
"details":{
"items":[
{
"idColisEntreeDetail":0,
"codeBarre":"123456789"
},
{
"idColisEntreeDetail":0,
"codeBarre":"234567890"
}
],
"count":2,
"arrayManager":{
}
},
"master":{
"version":""
}
}
Вместо этого можно использовать тип TArray<TDetails>
, но я потеряю все функции TList.
Как я могу использовать тип TList и получить правильный вывод Json?
TJson.ObjectToJsonString
иTJson.JsonToObject
, это дерьмо, поскольку они просто тупо сериализуют каждое поле. - person Stefan Glienke   schedule 26.03.2015DefineBinaryProperty
), то есть инфраструктура, которую нужно было использовать в качестве основы, а не что-то совершенно выходящее за рамки соответствует тому, как работает Delphi. - person Dalija Prasnikar   schedule 26.03.2015TJSONMarshal
(задается, например, вthis post
). Не знаю, как насчетTJson
, но я ожидаю там подобного подхода. - person TLama   schedule 27.03.2015TList
. - person Dalija Prasnikar   schedule 29.03.2015