Bonjour,
J'essaie d'apprendre à sérialiser des objets avec Delphi 10.3.3 Rio en utilisant les unités : REST.JsonReflect et REST.JSON.Types
J'ai écrit cette classe :
Ensuite pour sérialiser, je fais de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 TContainer: class(TGraphicControl) private [JSONMarshalledAttribute(False)] // Test to hide a property : works FObj: TObject; FId: Integer; FContainerName: string; [JsonName('Type')] // Test to customize the property name : works FContainerType: string; public property Id: Integer read FId write FId; property ContainerName: string read FContainerName write FContainerName; property ContainerType: string read FContainerType write FContainerType; end;
Mon code fonctionne lorsque ma classe n'hérite d'aucune autre classe, si je la déclare comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 var m: TJSONMarshal; JSONString: String; Container: TContainer; begin Container:= TContainer.Create(nil); Container.FId := 12; Container.FContainerName := 'Container001'; Container.FContainerType := 'TYPE_005'; JSONString := m.Marshal(Container).Format;
Mais lorsque je la déclare comme au dessus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2TContainer: class
J'ai une stack overflow exception. Je pense qu'elle est liée à l'héritage. Ma question est donc, est-il possible de ne pas tenir compte des propriétés héritées lors de la sérialisation de sorte que la variable JSONString ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TContainer: class(TGraphicControl)
Merci d'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 { "id": 7, "containerName": "Container001", "Type": "TYPE_005" }
[EDIT]
J'ai trouvé cette piste, avec la librairie Newtonsoft.Json en .NET, en ajoutant cette annotation à la classe :
[JsonObject(MemberSerialization.OptIn)].
Elle permet de ne sérialiser que les propriétés annotées avec [JsonProperty]. Mais je ne trouve aucun moyen pour le moment de réaliser la même chose avec Delphi.
Partager