Data.DBXJSONReflect.TTypeMarshaller

提供: RAD Studio API Documentation
移動先: 案内検索

Data.DBXJSONReflect.TMarshalUnmarshalBaseSystem.TObjectTTypeMarshaller

Delphi

TTypeMarshaller<TSerial: class> = class(TMarshalUnmarshalBase)

C++

template<typename TSerial> class PASCALIMPLEMENTATION TTypeMarshaller__1 : public TMarshalUnmarshalBase

プロパティ

種類 可視性 ソース ユニット
class public
Data.DBXJSONReflect.pas
Data.DBXJSONReflect.hpp
Data.DBXJSONReflect Data.DBXJSONReflect

説明

マーシャリングの親クラスを表します。

DBXJSONReflect ユニットは、JSON オブジェクトを具体的な対象とするオブジェクト シリアル化の軽量フレームワークを表します。 これを使用すると、ユーザーはあらゆるユーザー オブジェクトをシリアル化可能なオブジェクト(JSON や XML など)に変換でき、またその逆の変換もできます。

シリアル化可能なオブジェクトへの変換をマーシャリングと呼びます。 TJSONMarshal クラスはユーザー オブジェクトを TJSONValue オブジェクトに変換します。 その逆の処理はアンマーシャリングと呼ばれます。 TJSONUnMarshalTJSONValue を元のユーザー オブジェクトに戻します。

TTypeMarshaller クラスは Visitor パターンを実装しており、マーシャリングはこのパターンに基づいて行われます。 あらかじめ決められた状況で、イベントが発生します。 マーシャリング時に起こり得る状況の一覧を以下の表に示します。



状況 イベント

新しいオブジェクトが見つかる。

OnTypeStart

既にアクセスしたオブジェクトが見つかる。

OnRefType

新しいオブジェクトの内容が再度アクセスされる。

OnTypeEnd

新しいフィールドが見つかる。

OnFieldStart

新しいフィールドがアクセスされる。

OnFieldEnd

文字列値が見つかる。

OnString

数値が見つかる。

OnNumber

nil 値が見つかる。

OnNull

論理値が見つかる。

OnBoolean

リスト値が見つかる。

OnListStart

リストの処理が終了する。

OnListEnd



これらのイベントは TConverter インスタンスで受信されます。 ユーザー オブジェクトの構造によっては、これらは重複して発生します。 イベントとそれらの引数に基づいて、TConverter インスタンスがユーザー オブジェクトと同等のイメージを作成します。 TJSONConverter で JSON 変換コンポーネントが実装されます。

変換コンポーネントで作成されたオブジェクト イメージは、永続化やリモーティングなどに使用することができます。 このイメージは、アンマーシャリングで作動する逆変換コンポーネント イベントを使って、元のユーザー オブジェクトを復元するのに使用できます。 TJSONUnMarshal では、JSON イメージを使用してユーザー オブジェクトを復元します。 アンマーシャリングの方が簡単な処理であり、RTTI を使用してユーザー オブジェクトを復元します。 ユーザー オブジェクトが引数のないコンストラクタを持っていることを前提としています。

マーシャリング処理では、すべてのフィールドを文字列、数値、論理値のいずれかに変換します。 より複雑なフィールドを変換するには、ユーザー定義の変換コンポーネントや逆変換コンポーネントが必要です。 処理を行う前に、ユーザー定義の変換コンポーネントおよび逆変換コンポーネントをマーシャリング インスタンスおよびアンマーシャリング インスタンスに登録することができます。

変換コンポーネントと逆変換コンポーネントを型とフィールドに対して、あるいは型に対して登録することができます。 そのような型の宣言済みフィールドはすべて、ユーザーから提供された変換コンポーネントや逆変換コンポーネントで処理されます。 フィールドに登録された変換コンポーネントや逆変換コンポーネントは、型の変換コンポーネントや逆変換コンポーネントより優先されます。

フィールド変換コンポーネントは、フィールド値を文字列、オブジェクト、文字列リスト、オブジェクト リストのいずれかに変換できます。 これらの変換値は対応する逆変換コンポーネントに引数として渡され、そこでフィールド値が復元されることになります。

型変換コンポーネントは、値を文字列、オブジェクト、文字列リスト、オブジェクト リストのいずれかに変換できます。 これらは型の逆変換コンポーネントに引数として渡され、そこで元の型インスタンスが復元されることになります。

たとえば、TStringList フィールドを変換コンポーネントで文字列配列に変換し、逆変換コンポーネントでその文字列リストを使用して TStringList のインスタンスを作成し値を設定することができます。 この程度の複雑さが、ユーザー定義の変換コンポーネントや逆変換コンポーネントで想定されます。

RTTI がより強力になり、ライブラリ コードに格納されるメタデータが増えるにつれて、ユーザー定義の変換コンポーネントの必要性は低くなります。

整数型、文字列型、文字型、列挙型、浮動小数点型、オブジェクト型、レコード型の各フィールドについては、組み込みの変換や逆変換が既に存在します。 セット、メソッド、バリアント、インターフェイス、ポインタ、動的配列、クラス参照、配列の各型については、フィールド値は無視され、ユーザー定義の変換が必要です。

TTypeMarshaller では、オブジェクト ID マーカーと変換コンポーネント登録をサポートしています。 このクラスを特化する場合は通常、シリアル化型が提供されます。

関連項目