Data.DBXJSONReflect.TTypeMarshaller

De RAD Studio API Documentation
Aller à : navigation, rechercher

Data.DBXJSONReflect.TMarshalUnmarshalBaseSystem.TObjectTTypeMarshaller

Delphi

TTypeMarshaller<TSerial: class> = class(TMarshalUnmarshalBase)

C++

template<typename TSerial> class PASCALIMPLEMENTATION TTypeMarshaller__1 : public TMarshalUnmarshalBase

Propriétés

Type Visibilité  Source Unité  Parent
class public
Data.DBXJSONReflect.pas
Data.DBXJSONReflect.hpp
Data.DBXJSONReflect Data.DBXJSONReflect

Description

Représente la classe parent du marshaling.

L'unité DBXJSONReflect représente un framework léger pour la sérialisation d'objets avec une focalisation concrète sur les objets JSON. Elle permet à l'utilisateur de convertir tout objet utilisateur en un objet sérialisable (tel que JSON, XML, et ainsi de suite), et inversement.

La conversion en un objet sérialisable est appelée marshaling. La classe TJSONMarshal convertit des objets utilisateur en objets TJSONValue. Le processus inverse est appelé unmarshaling. TJSONUnMarshal rétablit une valeur TJSONValue en un objet utilisateur.

Le marshaling est réalisé en fonction d'un pattern visitor, implémenté par la classe TTypeMarshaller. Sur des situations prédéterminées, des événements sont émis. Le tableau suivant contient la liste des situations qui peuvent se produire durant le marshaling.



Situation Evénement

Un nouvel objet est rencontré.

OnTypeStart

Un objet déjà visité est rencontré.

OnRefType

Un nouveau contenu d'objet a été revisité.

OnTypeEnd

Un nouveau champ est rencontré.

OnFieldStart

Un nouveau champ est visité.

OnFieldEnd

Une valeur chaîne est rencontrée.

OnString

Une valeur numérique est rencontrée.

OnNumber

Une valeur nil est rencontrée.

OnNull

Une valeur booléenne est rencontrée.

OnBoolean

Une valeur liste est rencontrée.

OnListStart

Le traitement d'une liste est terminé.

OnListEnd



Les événements sont reçus par une instance de TConverter. Ils sont imbriqués, selon la structure de l'objet utilisateur. Basée sur les événements et leurs arguments, l'instance de TConverter construit une image équivalente de l'objet utilisateur. Un convertisseur JSON est implémenté par TJSONConverter.

L'image d'objet construite par le convertisseur peut être utilisée pour la persistance, l'accès à distance, et ainsi de suite. Cette image peut être utilisée pour reconstituer l'objet utilisateur original, en utilisant les événements du restaurateur pilotés par un unmarshaler. TJSONUnMarshal utilise une image JSON pour restaurer l'objet utilisateur. Le unmarshaling est un processus plus simple qui utilise RTTI pour reconstituer l'objet utilisateur. Il est supposé que l'objet utilisateur a un constructeur sans argument.

Le processus de marshaling transforme tous les champs en chaînes, nombres et valeurs booléennes. Pour transformer des champs plus complexes, il nécessite des convertisseurs/restaurateurs utilisateur. Les convertisseurs et les restaurateurs utilisateur peuvent être enregistrés avec les instances marshaler et unmarshaler, avant tout traitement.

Les convertisseurs et les restaurateurs peuvent être enregistrés sur un type et un champ, ou pour un type. Tout champ déclaré de ce type est traité par le convertisseur/restaurateur utilisateur fourni. Un convertisseur/restaurateur enregistré de champ a priorité sur un convertisseur/restaurateur de type.

Un convertisseur de champ peut transformer une valeur de champ en une chaîne, un objet, une liste de chaînes ou une liste d'objets. Le contrat est que ces valeurs transformées seront passées en arguments au restaurateur correspondant afin de reconstituer la valeur du champ.

Un convertisseur de type peut transformer une valeur en une chaîne, un objet, une liste de chaînes ou une liste d'objets. Ces valeurs transformées seront passées en arguments au restaurateur de type qui reconstituera l'instance de type originale.

Par exemple, un champ TStringList peut être converti en un tableau de chaînes par un convertisseur, et un restaurateur peut utiliser la liste de chaînes pour créer et remplir une instance de TStringList. C'est le degré de complexité attendu par un convertisseur/restaurateur défini par l'utilisateur.

Comme RTTI devient plus puissant et que davantage de métadonnées seront stockées dans le code de la bibliothèque, le besoin des convertisseurs définis par l'utilisateur ira en diminuant.

Voici les champs pour lesquels il y a déjà une conversion/restauration intégrée : entier, chaîne, caractère, énumération, flottant, objet, enregistrement. Pour les types suivants, les valeurs de champs sont ignorées et la conversion utilisateur est attendue : ensemble, méthode, variant, interface, pointeur, tableau dynamique, référence de classe, tableau.

TTypeMarshaller a un support de marqueur d'ID d'objet et un support d'enregistrement de convertisseur. Une spécialisation de cette classe fournit généralement le type sérialisation.

Voir aussi