ReferenceHandler.Preserve プロパティ

定義

JSON オブジェクトと配列が参照型に逆シリアル化され、参照型がシリアル化されるときに書き込まれるときにメタデータ プロパティを受け入れるかどうかを示すオブジェクトを取得します。 これは、循環または重複する参照を含むオブジェクトからラウンドトリップ可能な JSON を作成するために必要です。

public:
 static property System::Text::Json::Serialization::ReferenceHandler ^ Preserve { System::Text::Json::Serialization::ReferenceHandler ^ get(); };
public static System.Text.Json.Serialization.ReferenceHandler Preserve { get; }
static member Preserve : System.Text.Json.Serialization.ReferenceHandler
Public Shared ReadOnly Property Preserve As ReferenceHandler

プロパティ値

注釈

  • シリアル化時:

    • 複合参照型を記述する場合、シリアライザーはメタデータ プロパティ ($id$values$ref) もその中に書き込みます。
    • 出力 JSON には、すべてのオブジェクトに対して追加の $id プロパティが含まれます。列挙可能なすべての型に対して、出力される JSON 配列は、 $id プロパティと $values プロパティを含む JSON オブジェクト内に入れ子になります。
    • ReferenceEquals(Object, Object) は、オブジェクトが同一かどうかを判断するために使用されます。
    • オブジェクトが以前にシリアル化されたものと同じ場合、そのオブジェクトの識別子 ($id) へのポインター ($ref) が代わりに書き込まれます。
    • 値型のメタデータ プロパティは書き込まれなくなります。
  • 逆シリアル化時:

    • 重複した参照とサイクルを保持するために使用される JSON 内のメタデータ プロパティは、整形式である限り受け入れられます。*
    • メタデータ プロパティを含まない JSON オブジェクトの場合、逆シリアル化の動作は、 Preserveを使用しない場合と同じです。
    • 値型の場合、 $id メタデータ プロパティは無視されます。 JSON オブジェクト内で$refメタデータ プロパティが見つかった場合、JsonExceptionがスローされます。
    • 列挙可能な値型の場合、 $values メタデータ プロパティは無視されます。
  • JSON 内のメタデータ プロパティを整形式と見なすには、次の規則に従う必要があります。

    • AllowOutOfOrderMetadataPropertiestrue に設定されていない限り、$id メタデータ プロパティは JSON オブジェクトの最初のプロパティである必要があります。
    • $ref メタデータ プロパティを含む JSON オブジェクトには、他のプロパティを含めてはなりません。
    • $ref メタデータ プロパティの値は、JSON で前に表示された$idを参照する必要があります。
    • $idおよび$refメタデータ プロパティの値は JSON 文字列である必要があります。
    • List<T>などの列挙可能な型の場合、JSON 配列は、$id$valuesメタデータ プロパティを含む JSON オブジェクト内で、その順序で入れ子にする必要があります。 (ただし、 AllowOutOfOrderMetadataPropertiestrue に設定されている場合、順序は重要ではありません)。
    • 列挙可能な型の場合、 $values メタデータ プロパティは JSON 配列である必要があります。
    • $values メタデータ プロパティは、列挙可能な型を参照する場合にのみ有効です。

JSON が整形式でない場合は、 JsonException がスローされます。

適用対象