Serialisation d'objets : ignorer les propriétés héritées
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 :
Code:
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; |
Ensuite pour sérialiser, je fais de cette manière :
Code:
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; |
Mon code fonctionne lorsque ma classe n'hérite d'aucune autre classe, si je la déclare comme ça :
Mais lorsque je la déclare comme au dessus :
Code:
1 2
|
TContainer: class(TGraphicControl) |
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:
1 2 3 4 5 6
|
{
"id": 7,
"containerName": "Container001",
"Type": "TYPE_005"
} |
Merci d'avance pour votre aide.
[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.