
O Neon é uma biblioteca de serialização da Delphi que ajuda a converter objetos (para frente e para trás) e outros valores para JSON. Ele suporta tipos simples de Delphi, mas também classe e registros complexos. O Neon foi projetado com o Rest em mente, para trocar dados puros entre aplicativos sem "metadados" ou campos adicionados; na verdade, o neon é o mecanismo de serialização JSON padrão da biblioteca Wirl Rest.
Por favor, dê uma olhada nas demos para ver o neon em ação.
Esta é a demonstração principal em que você pode ver como pode serializar/desserializar tipos simples, registros, classes, tipos específicos de Delphi (tstringlist, tdataset, etc ...):

Esta nova demonstração tenta comparar o mecanismo de serialização padrão do TJSON com o motor Tneon, com algumas alterações que você pode comparar com outros mecanismos de serialização por aí:

Configuração extensiva através da interface INeonConfiguration :
O neon suporta a (de) serialização da maioria dos tipos padrão de Delphi, registros, matrizes e, claro, aulas. As aulas podem ser complexas como você deseja, pode conter matrizes, listas (genéricas), subclasses, gravação, etc ... ...
TCustomSerializer e registrar a nova classe de serializador na configuração Esta biblioteca foi testada com Delphi 12 Atenas , Delphi 11 Alexandria , Delphi 10.4 Sydney , Delphi 10.3 Rio , Delphi 10.2 Tóquio , mas com uma quantidade mínima de trabalho, deve compilar com Delphi Xe7 e superior
Esta biblioteca não tem dependências de bibliotecas/unidades externas.
Unidades Delphi usadas:
Basta adicionar o caminho da fonte "fonte" ao seu caminho do projeto Delphi e ... você está pronto para ir!
A maneira mais fácil de serializar e desesterizar é usar a classe de utilidade TNeon :
Serialização de objetos:
var
LJSON: TJSONValue;
begin
LJSON := TNeon.ObjectToJSON(AObject);
try
Memo1.Lines.Text := TNeon.Print(LJSON, True);
finally
LJSON.Free;
end ;
end ;Deserialização do objeto:
var
LJSON: TJSONValue;
begin
LJSON := TJSONObject.ParseJSONValue(Memo1.Lines.Text);
try
TNeon.JSONToObject(AObject, LJSON, AConfig);
finally
LJSON.Free;
end ; Usando as classes TNeonSerializerJSON e TNeonDeserializerJSON , você tem mais controle sobre o processo.
Serialização de objetos:
var
LJSON: TJSONValue;
LWriter: TNeonSerializerJSON;
begin
LWriter := TNeonSerializerJSON.Create(AConfig);
try
LJSON := LWriter.ObjectToJSON(AObject);
try
Memo1.Lines.Text := TNeon.Print(LJSON, True);
MemoError.Lines.AddStrings(LWriter.Errors);
finally
LJSON.Free;
end ;
finally
LWriter.Free;
end ;
end ;Deserialização do objeto:
var
LJSON: TJSONValue;
LReader: TNeonDeserializerJSON;
begin
LJSON := TJSONObject.ParseJSONValue(Memo1.Lines.Text);
if not Assigned(LJSON) then
raise Exception.Create( ' Error parsing JSON string ' );
try
LReader := TNeonDeserializerJSON.Create(AConfig);
try
LReader.JSONToObject(AObject, LJSON);
MemoError.Lines.AddStrings(LWriter.Errors);
finally
LReader.Free;
end ;
finally
LJSON.Free;
end ;É muito fácil configurar neon ,
var
LConfig: INeonConfiguration;
begin
LConfig := TNeonConfiguration.Default
.SetMemberCase(TNeonCase.SnakeCase) // Case settings
.SetMembers(TNeonMembers.Properties) // Member type settings
.SetIgnoreFieldPrefix(True) // F Prefix settings
.SetVisibility([mvPublic, mvPublished]) // Visibility settings
// Custom serializer registration
.GetSerializers.RegisterSerializer(TGUIDSerializer)
;
end ;