この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

JsonAccess アノテーション

Apex クラスレベルで定義される @JsonAccess アノテーションは、クラスのインスタンスがシリアライズまたはデシリアライズできるかどうかを制御します。アノテーションで JSON のシリアライゼーションおよびデシリアライゼーションが制限されている場合、JSONException 実行時例外が発生します。

@JsonAccess アノテーションの serializable および deserializable パラメータにより、Apex でシリアライゼーションおよびデシリアライゼーションが許可されるコンテキストが適用されます。一方または両方のパラメータを指定できますが、パラメータなしでアノテーションを指定することはできません。シリアライゼーションおよびデシリアライゼーションを許可するかどうか示すパラメータの有効な値は、次のとおりです。
  • never: 許可しない
  • sameNamespace: 同じ名前空間の Apex コードの場合にのみ許可する
  • samePackage: 同じパッケージの Apex コードの場合にのみ許可する (第二世代パッケージにのみ影響)
  • always: どの Apex コードでも常に許可する

JsonAccess の考慮事項

  • JsonAccess のアノテーションが付いた Apex クラス���拡張された場合、拡張されたクラスではこのプロパティが継承されません。
  • toString メソッドがシリアライズできないオブジェクトに適用された場合、非公開データが公開可能になります。保護が必要なデータを含むオブジェクトでは、toString メソッドをオーバーライドする必要があります。たとえば、地図にキーとして保存されているオブジェクトをシリアライズすると、toString メソッドが呼び出されます。生成された地図には、キー (文字列) と値のエントリが含まれているため、オブジェクトのすべての項目が公開されます。

次のコード例は、@JsonAccess アノテーションでマークされている Apex クラスを示します。

1// SomeSerializableClass is serializable in the same package and deserializable in the wider namespace
2
3@JsonAccess(serializable='samePackage' deserializable=’sameNamespace)
4public class SomeSerializableClass { }
5
6
7// AlwaysDeserializable class is always deserializable and serializable only in the same namespace (default value from version 49.0 onwards)
8
9@JsonAccess(deserializable=’always)
10public class AlwaysDeserializable { }

バージョン管理動作の変更

バージョン 48.0 以前の場合、既存の動作を保持するためにデシリアライゼーションのデフォルトのアクセス権は always、シリアライゼーションのデフォルトのアクセス権は sameNamespace になっています。バージョン 49.0 以降の場合、シリアライゼーションとデシリアライゼーションのデフォルトのアクセス権はどちらも sameNamespace になります。